2016-04-13 12 views
1

NSUserDefaultsを使用してアプリケーションにキーと値のペアを格納しています。以下のサンプルコードです:NSUserDefaultsは信頼できませんか?

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    let ud = NSUserDefaults.standardUserDefaults() 
    if !(ud.boolForKey("launched_before")) { 
     print("first_launch") 
     ud.setBool(true, forKey: "launched_before") 
    } else { 
     print("not_first_launch") 
    } 
} 

予想通り、私は、アプリケーションを初めて起動したときには、それが「first_launch」を印刷し、あまりにも予想通り、私は、アプリケーションを起動二回目は、それが「not_first_launch」を出力します。しかし、XcodeでStopボタンとRunボタンを数回(4〜20回)押してアプリケーションを再起動すると、boolForKey("launched_before")はfalseを返します。
私のデバイス(iPhone 6、iOS 9.3.1)とXcode 7.3でテストしています。
誰でも私を助けることができますか?

答えて

3

NSUserDefaultsは、Xcodeの停止/実行によってNSUserDefaultsを終了すると、信頼性が低下し、さらに悪化することがあります。

NSUserDefaults.StandardUserDefaults().synchronizeを呼び出すと、データが保存されます。

+0

これが役に立ちます! –

+0

しかし、それが期待どおりに動作するのはどのように2度目になりますか。つまり、ブール値の設定は成功です。 – TangZijian

+0

これはどのようにNSUserDefaultを理解するのに役立ちます:http://www.accella.net/knowledgebase/nsuserdefaults-some-pretty-good-practices/ –

関連する問題