2014-05-03 39 views
9

我使用[NSUserDefaults standardDefaults]來存儲布爾值,看看它是否是第一次啓動應用程序...如果是這樣,應用程序應該顯示一個註冊窗口。NSUserDefaults值定期丟失

  • 這是工作的罰款,直到上週,但現在,有時當我切換到其他應用程序和一小會兒回來後,我看到註冊頁面負載,同時它不應該。

  • 我以前NSLog看到什麼是存儲在[NSUserDefaults standardDefaults],我看到我存儲的值已被設置爲nil (null)雖然我還沒有在我的代碼做任何地方。

有誰知道爲什麼值重置?

P.S:其實值不會永久丟失,因爲如果我沒有在註冊頁面做任何事情,退出應用程序,而不是,它通常會下一次我進入應用程序啓動!

+0

你確定你已經調用過[[[NSUserDefaults standardUserDefaults] synchronize]'嗎? – Avt

+0

是的,我已經打過電話了!正如我在我的問題中所描述的!它工作很好,並且每次都不會發生,所以它必須同步! –

+0

你的問題從不提及同步調用。您是否肯定在更改默認值後調用同步? –

回答

0

確保您在設置preferences之後立即致電[[NSUserDefaults standardUserDefaults] synchronize],並且您不覆蓋您的偏好設置。

+0

是的,我已經調用過了!正如我在我的問題中所描述的!它工作很好,並且每次都不會發生,所以它必須同步! –

+0

而我並沒有在我的代碼中的任何地方刪除密鑰! –

1

很久以前我遇到了這個問題,結果我使用的第三方庫在將值存儲到NSUserDefaults時使用了相同的密鑰。嘗試搜索你的項目的這個鍵,也許別的東西重置它。

+0

首先,我已經做到了。沒有發現類似的關鍵。只是爲了確保我改變了關鍵。但同樣的問題存在。即使有一件事正在重新設置這把鑰匙,但有一件事沒有任何解釋:當我退出並重新啓動時,爲什麼價值正在恢復到正確的價值? –

+0

對我來說,這是我曾經放過一段代碼,並忘記它是否會刪除我的應用程序默認值。 – Tanzeel

1

下面是我知道失去值NSUserDefaults,在可能性順序方式:

  1. 的關鍵是永遠不會保存在首位
  2. 您的應用程序後會刪除它
  3. 的應用程序被刪除並重新安裝
  4. 另一個應用程序重寫或刪除鍵
  5. 手機或模擬器復位
  6. 在夜間,手機是通過尋找相同的,不同的手機

這聽起來像,從這裏的討論所取代,你已經排除了1,2,4,大概3 & 5。我能想到的唯一一個調試步驟就是將測試手機始終存儲在鎖定的抽屜中。

但我會把錢留在導致#1的間歇性問題上。爲此,我們需要發佈代碼進行調查。

編輯 -

的張貼在這裏NSUserDefaults問題的高%是關於存儲布爾值將和其它標量類型。它看起來像OP知道在NSNumbers中包裝,但特別是BOOLS是充滿的,因爲它很容易混淆虛假的值,如NO NO和NIL,和NSNull實例。

讓我們把它放在#2.5的這個問題的列表中。還有,需要代碼來確認。

1

如果在測試時發生這種情況,這很正常。該計劃甚至作出這一決定(我應該顯示註冊頁面?)的事實表明,該應用程序已被強制退出,並從頭開始。測試時,這可能會導致在應用程序從Xcode重新加載時清除應用程序沙箱。然而,在真實用戶的真實生活中,這種情況不會發生(除非用戶從設備上刪除應用程序)。

+0

你碰巧有任何鏈接或資源支持這個,或者這是來自個人經驗? – cbh2000

+0

@ cbh2000我不認爲我最近看到它發生。 – matt