我在Swift 2.0中遇到NSUserDefault
的一个小问题。iOS 9 - NSUserDefault未设置
我做如下操作:
let standardUserDefaults = NSUserDefaults.standardUserDefaults()
standardUserDefaults.removeObjectForKey(key)
NSUserDefaults.standardUserDefaults().synchronize()
or
standardUserDefaults.synchronize()
我的问题是,如果我这样做后,要关闭应用程序,关键是不能被删除。
以前我没有足够的synchronize()
,并期待在论坛上后,我意识到,你需要强制行动,如果你需要它立即,而不是让苹果做定期来完成。
我还在applicationDidEnterBackground
和applicationDidBecomeActive
中加入了synchronize()
,以便尝试查看,但仍然无效。
所以这很奇怪,如果我等我执行操作之后,检查一下,键是否被删除。 如果我在执行操作后等待或不执行操作,则强制退出应用程序(滑动应用程序),当我加载应用程序时,密钥仍然存在,即使调用了applicationDidEnterBackground
和applicationDidBecomeActive
而synchronize()
被称为。 如果我只是在后台应用程序,相同的行为: -/
我不知道我在这里失踪?
好了,所以这里更多的细节:
好了,所以我在一个视图控制器执行的操作:
@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"
感打印。
我然后调用删除方法:
let standardUserDefaults = NSUserDefaults.standardUserDefaults()
standardUserDefaults.removeObjectForKey("TEST2")
我然后发送该应用回在后台,并且唤醒应用备份,我检查在断点在同一applicationDidBecomeActive
正在打印的值。 ..我正在使用我的手机,而不是模拟器......它只是没有意义。
我也尝试而不是删除要做到这一点,而不是:
NSUserDefaults.standardUserDefaults().setObject(
NSKeyedArchiver.archivedDataWithRootObject("TEST 3"), forKey: "TEST2").
在applicationDidBecomeActive
输出"TEST 1"
....好像没有施加修改:-O
时间来调用这个方法你在哪里执行的代码? – LinusGeffarth
@ julien你需要显示你的代码的其余部分以及它的实现位置。 BTW调用同步它是不需要的,不会有所作为。 –
这是首先缓存内存的模拟器问题。它只发生在xcode中,不应该发生在设备上。你检查过设备吗? –