2016-06-15 84 views
17

我嘗試從/從[NSUserDefaults standardUserDefaults]寫入/讀取值,但它似乎不起作用。我的代碼是:iOS 10,NSUserDefaults不起作用

[[NSUserDefaults standardUserDefaults] setObject:@"sampleString" forKey:@"sampleKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
NSString *defaultsValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"sampleKey"]; 
return defaultsValue; 

此代碼返回nil,爲的Xcode 8.0 beta和iPhone 6S(10.0)模擬器。 然而,它返回sampleString爲Xcode 8.0測試版和iPhone 6s(9.1)模擬器

我正在測試我的應用程序與新系統。難道我做錯了什麼?或者有沒有解決方法?還是隻是一個「測試」問題?

+0

這對我來說看起來很好。檢查NSUserDefaults的文檔,看看是否有什麼新東西適用於iOS 10 –

+1

在寫入之後立即讀取值的深刻(實用)意義是什麼? – vadian

+1

@vadian這不是我的實際代碼。我基本上是在第一次啓動應用程序時寫的,第二次閱讀。示例代碼只是一個測試後,我意識到它不工作。 – antonio

回答

24

我剛剛有同樣的問題。第一次運行iOS8或9模擬器,然後運行iOS10模擬器時,似乎存在NSUserDefaults問題。 重新啓動mac解決了我的問題。

+2

確認。關閉並重新打開模擬器不起作用,但重新啓動爲我修復。 –

+0

同樣的問題,同樣的解決方法,謝謝 – Medhi

+0

非常感謝我剛剛遇到同樣的情況 – Akabrando

5

這是與iPhone模擬器中的錯誤,與Xcode的運8測試版1已經固定在Beta 2中:

在Xcode 8 beta 2版本中解決 - IDE

模擬器

  • NSUserDefaults在iOS 10模擬器中正確運行,無論您是否有先前啓動的iOS 8或iOS 9模擬器的 。 (25974372)

Xcode 8 Beta 2 Release Notes

更新到Xcode中8 Beta 2中,以避免重新啓動主機每次蘋果。

1

我剛剛有同樣的問題。首次運行iOS8或9模擬器,然後運行iOS10模擬器時,NSUserDefaults似乎有問題。重新啓動Mac解決了我的問題。 shareeditflag 確認。關閉並重新打開模擬器不起作用,但重新啓動爲我修復。

按照Apple(apple link)WWDC種子:運行多個iOS模擬器可能導致NSUserDefaults無法運行運行iOS 8或9模擬器,然後運行iOS 10模擬器將導致NSUserDefaults在模擬器中停止工作。這可以通過重新啓動主機Mac來解決。

2

更新:

如果數據保護被啓用,synchronize也可以在應用程序進入背景失敗。


我們有運行iOS 9.1.1一個真實設備在這個問題上。舊值可以被讀取,但新的更改不能保存到磁盤,方法總是失敗。

重新啓動設備可能會解決此問題。

+0

謝謝!我希望用戶的設備不是這種情況! –

+0

謝謝你,我在真實設備上面對這個問題。 – Ricardo

+0

但我有數據保護禁用。 – Ricardo