iOS 9 - NSUserDefault未设置

时间:2015-12-02 17:21:58

标签: ios swift swift2 nsuserdefaults

我在Swift 2.0中遇到了NSUserDefault的轻微问题。

我正在进行以下操作:

    let standardUserDefaults = NSUserDefaults.standardUserDefaults()
    standardUserDefaults.removeObjectForKey(key)

     NSUserDefaults.standardUserDefaults().synchronize()
or 
     standardUserDefaults.synchronize()

我的问题是,如果我在执行此操作后关闭应用程序,则不会删除密钥。

以前我没有synchronize(),在浏览论坛后,我意识到如果你需要立即行动而不是让苹果定期这样做,你需要强行执行。

我还在synchronize()applicationDidEnterBackground中添加了applicationDidBecomeActive,以便尝试查看但仍然无效。

所以很奇怪,如果我在执行动作后等待,并检查,那么密钥就会被删除。 如果我在执行操作后等待或不等待,则只需强制退出应用程序(向上滑动应用程序),当我加载应用程序时,密钥仍然存在,即使applicationDidEnterBackgroundapplicationDidBecomeActive被调用,synchronize()被调用。 如果我只是将应用程序放在后台,同样的行为: - /

我不确定我在这里缺少什么?

好的,这里有更多细节:

好的,我在ViewController中执行操作:

@IBAction func doneAction() {

<DO SOME STUFF>

let standardUserDefaults = NSUserDefaults.standardUserDefaults()
standardUserDefaults.removeObjectForKey(key)
NSUserDefaults.standardUserDefaults().synchronize()

}

没什么特别的: - / 我不明白为什么如果我关闭应用程序或将应用程序放在后台,操作不会被应用或丢弃?

它在视图控制器中实现:

class reviewViewController: ViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIScrollViewDelegate, State {

编辑:   @HongWei NSUserDefaults已经被包裹起来,在发送到应用程序的后台期间,没有任何东西可以调用那个人了。

我试过了:

NSUserDefaults.standardUserDefaults().setObject(
            NSKeyedArchiver.archivedDataWithRootObject("TEST 1"), forKey: "TEST2").

然后我将应用程序放在后台,然后在我重新启动应用程序时检查applicationDidBecomeActive方法:

if let data = NSUserDefaults.standardUserDefaults().objectForKey("TEST2") as? NSData, wrapper = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? String{
    print(wrapper);
}

我看到"TEST 1"正在打印。

然后我调用delete方法:

let standardUserDefaults = NSUserDefaults.standardUserDefaults()
standardUserDefaults.removeObjectForKey("TEST2")

然后我在后台发回应用程序,然后重新启动应用程序,我在相同的applicationDidBecomeActive中检查断点正在打印的值...我正在使用我的手机而不是模拟器......这没有意义。

我也尝试而不是删除来代替:

NSUserDefaults.standardUserDefaults().setObject(
            NSKeyedArchiver.archivedDataWithRootObject("TEST 3"), forKey: "TEST2").

applicationDidBecomeActive输出为"TEST 1" ....似乎修改未应用:-O

1 个答案:

答案 0 :(得分:0)

尝试

NSUserDefaults.standardUserDefaults().registerDefaults(registrationDictionary)

NSUserDefaults Class Reference要求

  

每次应用程序启动时都需要调用此方法

相关问题