2017-01-08 47 views
0

這裏是我的問題:我在我的viewController幾個變量,例如:訪問和存儲的appDelegate的viewController變量

var money = 0.0 

我想作爲應用即將終止儘快在設備上存儲該值。爲此,我需要能夠訪問appDelegate中的變量並在'applicationWillTerminate'中使用它。然後我希望它被存儲在設備上,當應用程序重新啓動時,我希望能夠再次訪問存儲的值。我如何在(swift)Xcode 8.2中執行此操作?

回答

1

正如蘋果文檔所說,「applicationWillTerminate」不會在現代應用程序中被調用,除非您在plist中設置了特定標誌。 正確的做法是將這些值存儲在NSUserDefault:

對於SWIFT 3.0:

1)讓我們創建一個類來管理資金,併爲他們節省:

class MoneyManager: NSObject { 

    private let MONEY_KEY = "money" 

    static let sharedInstance = MoneyManager() 

     var money: Float? { 
     get { 
      let returnValue = UserDefaults.standard.object(forKey: MONEY_KEY) as? Float 
      return returnValue 
     } 

     set(newValue){ 
      if newValue == nil { 
       UserDefaults.standard.removeObject(forKey: MONEY_KEY) 
      } else { 
       UserDefaults.standard.set(newValue!, forKey: MONEY_KEY) 
      } 

      UserDefaults.standard.synchronize() 
     } 
    } 
} 

2)在使用它每個控制器,您需要:

let money = MoneyManager.sharedInstance.money 
if money == nil{ 
    MoneyManager.sharedInstance.money = 1000 
} 

由於每一個我們稱之爲UserDefaults.standard.synchronize(時間),我們是安全的一切都將被保存。

+1

如果此值需要安全,那麼我會考慮查看Keychain,同樣使用上述方法在每次更新時保存該值。依賴單個應用程序事件可能會導致數據丟失,例如應用程序崩潰,因此不會觸發應用程序委託事件。 –

相關問題