2013-06-04 124 views
16

我保存到NSUserDefaults的設置中有一個非必需對象,它具有開箱即用的默認設置。在用戶爲這個對象設置一個值之前,當我從NSUserDefaults解除存檔時,應用程序會生成錯誤「[NSKeyedUnarchiver initForReadingWithData:]:data is NULL」。我忽略了錯誤,否則應用程序正常工作。[NSKeyedUnarchiver initForReadingWithData:]:data is NULL

有避免這種情況的最佳做法,這是一個擔心嗎?

+0

如果你不想該密鑰的默認值,那麼不要在第一個位置創建密鑰。只有在用戶設置值時才創建它。 – rdelmar

+0

但是在啓動應用程序之前,我不知道是否先前設置了一個值,直到我檢查NSUserDefaults。 –

回答

22

我不知道你解除存檔什麼,但如果你可以看一下鍵第一,你之前解除存檔,你可以做這樣的:

if ([[[NSUserDefaults standardUserDefaults] dictionaryRepresentation].allKeys containsObject:@"keyForNonMandatoryObject"]) { 
     // unarchive the value here 
    } 
+23

爲什麼不這樣做:'if([[NSUserDefaults standardUserDefaults] objectForKey:@「keyForNonMandatoryObject」]){'?爲什麼要讓整個字典只是爲了檢查一個密鑰? – rmaddy

+0

太棒了!這很好,而@maddy提供的解決方案接近一點。謝謝。 –

+0

@rmaddy,腦子spazz我想 - 我想我需要避免對象本身,所以他沒有得到錯誤,但正如你正確的建議,只是檢查該對象是否存在不會嘗試嘗試嘗試解開一個不存在的對象。 – rdelmar

相關問題