2017-04-08 49 views
0

想知道是否有人遇到此問題?iOS中的NSUserDefaults隨機消失並重新出現

我正在使用Objective-C開發iOS應用程序。 有時我編譯應用程序後,我的數據NSUserDefaults將會丟失。

但是,如果我忽略它並重新編譯應用程序,數據突然重新出現。

我已經在幾個地方同步了(不是在每個按鍵中,而只在幾個地方)。

如果有人碰巧遇到這個問題,我希望你能分享如何處理這個問題。

P.S.我需要一個存儲空間來保存一個特定對象,以便在應用程序重新打開時檢索它。

編輯添加代碼

NSString *enPIN = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@", [enterField.text md5]]]; 

[[NSUserDefaults standardUserDefaults] setObject:enPIN forKey:@"pin"]; 
[[NSUserDefaults standardUserDefaults]synchronize]; 

NSLog(@"check pin %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"pin"]); 

的對象是一個字符串,我用它的MD5,然後將其存儲在nsuserdefault,如果它只是隨機dissapearing也許它不奇怪,但它也是後再次reapearing散列它消失,如果我重新編譯應用程序

+0

將對象存儲在以下答案鏈接中以讀取並存儲在相同狀態中。 http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults –

+0

請顯示您的代碼。您是在設備還是模擬器上測試?如果模擬器總是使用相同的模擬器? '同步'伊恩沒有必要。 – Paulw11

+0

@ Paulw11您好保羅編輯我的問題添加代碼,即時消息不使用模擬器,即時通訊使用設備,ipad mini2, –

回答

0

檢查您的默認值是否只使用字符串值或布爾或等。

如果你使用的任何對象與類(鍵和參數)像NSObject存儲默認情況下,我寧願你做相應的編碼和解碼之前存儲和檢索值。

另外如果你存儲任何NSDictionary檢查,如果該字典內的任何對象值不是除Bool,String之外的其他任何東西,如果還有任何NSObject類或引用存儲,那麼你可能面臨同樣的問題。

請參考此stackoverflow link關於在存儲到NSUserDefaults之前如何對對象進行編碼。

最後,[默認同步]調用是必需的,無論哪種方式執行,viewwill都會顯示或立即存儲新值。

希望這會有所幫助。

+0

你並不需要調用'synchronize' – Paulw11

+0

您好,我編輯我的問題補充我的代碼,我只放了MD5散列字符串中它和它同步,奇怪的是,它消失後,我重新編譯它,並且該值將重新正確顯示。 –

+0

你可以做的後續, 的NSString * enPIN = [enterField.text MD5] [[NSUserDefaults的standardUserDefaults]的setValue:enPIN forKey:@ 「銷」]; [[NSUserDefaults standardUserDefaults] synchronize]; 的NSLog(@ 「檢驗銷%@」,[[NSUserDefaults的standardUserDefaults] valueForKey:@ 「銷」]); 把日誌中Didfinishlaunchwith選項閱讀和Appwill終止函數並檢查值存儲在退出的時間和進入應用程序。 –

0

我也有類似的問題,有一天與NSUserDefaults

不太清楚是什麼導致它,但它在Xcode中的錯誤所致。我能夠解決這個問題,而無需改變我的代碼。我只是清理了這個項目(CMD-Shift-K)並重新啓動了我的電腦,然後它工作得很好。值得一試

您是否在控制檯中收到任何類型的錯誤消息?

+0

我沒有得到任何形式的錯誤信息在控制檯中,它只是成功地保存到NSUserDefaults,有時隨機消失,並重新出現,如果我只是重新編譯它消失後再次。 我記錄了應用程序打開時的值,並且它已經消失 –

相關問題