2016-10-11 60 views
0

我想向我的代碼添加一個介紹序列,以便如果它是第一次打開該應用程序,用戶可以輸入一些基本信息(然後可以將其存儲在UserDefaults中)。執行介紹序列的最佳方式? Swift

我想這樣做的方法是通過一個名爲isFirstTime的變量,最初設置爲true。每次打開應用程序時,它都會檢查UserDefaults中是否有isFirstTime的值。如果它不存在,它將觸發具有我的前奏序列的視圖控制器顯示。一旦介紹序列完成,isFirstTime將被設置爲false,然後存儲在UserDefaults中。

這是一個正確的實現,還是有一個更有效的方法?

編輯:如果有人有興趣,這是我用來實現我的介紹序列的代碼。我首先在我的視圖控制器之外分配一個布爾變量來跟蹤它是否是第一次打開應用程序。

var isFirstTime = true 

然後,在我的ViewDidAppear(它不會在ViewDidLoad方法工作),我添加了這個代碼,檢查是否我已經有我的isFirstTime變量UserDefault。如果是,我然後執行我的程序的其餘部分,但如果沒有,我啓動我的前奏序列的視圖控制器。

if UserDefaults.standard.object(forKey: "isFirstTime") != nil{ 
     // Not the first time app is opened 
     isFirstTime = false // I use isFirstTime elsewhere in my code too. 
    } else { 
     let introVC = self.storyboard?.instantiateViewController(withIdentifier: "intro") 
     self.present(introVC!, animated: false, completion: nil) 
    } 

在我的介紹順序視圖控制器,當我與我的收集用戶的基本信息完成後,我做兩件事情:第一是改變isFirstTime值並將其設置爲一個UserDefault,第二是解散視圖控制器。

isFirstTime = false 
UserDefaults.standard.set(isFirstTime, forKey: "isFirstTime") 
dismiss(animated: false, completion: nil) 
+2

這是完全正確的。 (當然,魔鬼會在細節上。) – matt

+2

檢查它是否反向的情況下,最初檢查它是否爲假。一旦你顯示介紹序列,使布爾值爲真。 – Arasuvel

+0

@Arasuvel你是什麼意思,檢查它是相反的情況? – kbunarjo

回答

2

您可以輕鬆實現。這是我用它的代碼。

步驟1首先創建一個名爲UserDefaultManager.swift

import UIKit 

// User Defaults Manager Constants 
let kIsFirstTimeLaunch = "IsFirstTimeLaunch" 

class UserDefaultsManager: NSObject { 

// MARK: Setter Methods 

class func setIsFirstTimeLaunch(flag: Bool) { 
    NSUserDefaults.standardUserDefaults().setBool(flag, forKey:kIsFirstTimeLaunch) 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

// MARK: Getter Methods 

class func isFirstTimeLaunch() -> Bool { 
    return NSUserDefaults.standardUserDefaults().boolForKey(kIsFirstTimeLaunch) 
} 

// MARK: Reset Methods 

class func resetIsFirstTimeLaunch() { 
    NSUserDefaults.standardUserDefaults().removeObjectForKey(kIsFirstTimeLaunch) 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

} 

第2步文件:在您的實現文件檢查它象下面這樣:

if(!UserDefaultsManager.isFirstTimeLaunch()) { 
     // Your code here. 
     let introVC = self.storyboard?.instantiateViewController(withIdentifier: "intro") 
     self.present(introVC!, animated: false, completion: nil) 

     // Update value in user defaults 
     UserDefaultsManager.setIsFirstTimeLaunch(true) 
    }