我在Swift 2.0中遇到了NSUserDefault
的轻微问题。
我正在进行以下操作:
let standardUserDefaults = NSUserDefaults.standardUserDefaults()
standardUserDefaults.removeObjectForKey(key)
NSUserDefaults.standardUserDefaults().synchronize()
or
standardUserDefaults.synchronize()
我的问题是,如果我在执行此操作后关闭应用程序,则不会删除密钥。
以前我没有synchronize()
,在浏览论坛后,我意识到如果你需要立即行动而不是让苹果定期这样做,你需要强行执行。
我还在synchronize()
和applicationDidEnterBackground
中添加了applicationDidBecomeActive
,以便尝试查看但仍然无效。
所以很奇怪,如果我在执行动作后等待,并检查,那么密钥就会被删除。
如果我在执行操作后等待或不等待,则只需强制退出应用程序(向上滑动应用程序),当我加载应用程序时,密钥仍然存在,即使applicationDidEnterBackground
和applicationDidBecomeActive
被调用,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
答案 0 :(得分:0)
尝试
NSUserDefaults.standardUserDefaults().registerDefaults(registrationDictionary)
NSUserDefaults Class Reference要求
。每次应用程序启动时都需要调用此方法