我在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中,不應該發生在設備上。你檢查過設備嗎? –