Ios 在appDelegate中访问和存储viewController变量

Ios 在appDelegate中访问和存储viewController变量,ios,swift,Ios,Swift,我的问题是:我的viewController中有几个变量,例如: var money = 0.0 我想在应用程序即将终止时立即将此值存储在设备上。为此,我需要能够访问appDelegate中的变量,并在“applicationWillTerminate”中使用它。然后,我希望它存储在设备上,当应用程序重新启动时,我希望能够再次访问存储的值。如何在(swift)Xcode 8.2中实现这一点?正如苹果文档所说,“应用程序将终止”在现代应用程序中不再被调用,除非您在plist中设置了特定标志。 正

我的问题是:我的viewController中有几个变量,例如:

var money = 0.0
我想在应用程序即将终止时立即将此值存储在设备上。为此,我需要能够访问appDelegate中的变量,并在“applicationWillTerminate”中使用它。然后,我希望它存储在设备上,当应用程序重新启动时,我希望能够再次访问存储的值。如何在(swift)Xcode 8.2中实现这一点?

正如苹果文档所说,“应用程序将终止”在现代应用程序中不再被调用,除非您在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
}

每当我们调用UsService Debug .Stimult.SimuleId()时,我们都是安全的。

如果这个值需要是安全的,那么我会考虑查看密钥链,也可以使用上面的方法每次更新时保存该值。依赖单个应用程序事件可能会导致数据丢失,例如应用程序崩溃,因此不会触发应用程序委派事件。