2017-01-08 4 views
0

でのViewControllerの変数にアクセスし、保存することはここに私の問題だ:私は例えば、私のViewControllerで複数の変数を持っている:がappDelegate

var money = 0.0 

私は、すぐにアプリが終了しようとしているように、デバイス上でこの値を保存します。これを行うには、appDelegateの変数にアクセスし、 'applicationWillTerminate'で変数を使用できるようにする必要があります。私はそれをデバイスに保存しておきたいと思いますし、アプリケーションが再起動したら、保存された値に再びアクセスできるようにしたいと思います。どのようにすれば(速い)Xcode 8.2でこれを行うことができますか?

答えて

1

"applicationWillTerminate" Apple docsが言うように、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

この値を安全にする必要がある場合は、キーチェーンを調べて、更新されるたびに上記の方法で値を保存することも検討します。 1つのアプリイベントに頼ると、アプリのクラッシュなどのデータが失われ、アプリデリゲートイベントが発生しなくなる可能性があります。 –

関連する問題