2013-03-20 49 views
3

NSUserDefaults讀取時,我無故崩潰。我第一次讀它很好。我得到的數據和它的好。第二次,我得到一個崩潰/我得到空值。用戶默認讀取崩潰 - 非常不尋常

事情我已經檢查:

  • 不,我不會刪除它別的地方。
  • 不,沒有人在同一時間調用它。
  • 如果它爲零?它不應該是零,我沒有地方可以擦除它,在第一次(有數據)和第二次(崩潰)之間,沒有人甚至觸摸它。
  • 它節省了NSMutableArrayNSData,它可能是好的,因爲它可以在第一個電話上工作。

它可能是什麼?

return [[NSUserDefaults standardUserDefaults]objectForKey:@"tempImagesArray"]; 

我甚至沒有把代碼保存它,因爲我救它時,首先啓動的應用程序,我第二次甚至不保存任何東西,它的存在,從內存中最後一次。 (它的存在,在第一個電話不是第二)

編輯:::彙編我看到崩潰:

0x19f8e2c: movl %eax, (%esp) 
0x19f8e2f: calll 0x1bcdfee     ; symbol stub for: objc_msgSend 
0x19f8e34: jmp 0x19f8e38     ; -[NSUserDefaults(NSUserDefaults) objectForKey:] + 74 
0x19f8e36: xorl %eax, %eax 
0x19f8e38: addl $20, %esp 
+0

您不能使用給定的代碼使應用程序崩潰。你的問題在別處。 – Desdenova 2013-03-20 10:17:46

+0

請參閱編輯。我想這樣,但看到日誌 – Curnelious 2013-03-20 10:19:50

+0

首先嚐試從本地獲取該數組(刪除返回語句) - NSArray * checkArray = [[NSUserDefaults standardUserDefaults] objectForKey:@「tempImagesArray」];的NSLog(@ 「%@」,checkArray);結果是什麼? – Mrunal 2013-03-20 10:20:50

回答

0

幾件事情來到我的腦海:

  • 你以後打電話[[NSUserDefaults standardUserDefaults] synchronize]將數組設置爲默認字典?

實驗值:當你的代碼展示了一個NSMutableArray,我只是指出這一點(按照蘋果的docs):

值從返回的NSUserDefaults的是不可變的,即使你設置一個可變對象作爲值。例如,如果將可變字符串設置爲「MyStringDefault」的值,則稍後使用stringForKey檢索的字符串將是不可變的。

  • 您存儲的數據是否過大?我無法找到NSUserDefaults上實際上「太多數據」的定義,但我猜測如果數據集太大,可能會發生奇怪的事情。是否有可能嘗試將這些數據存儲在文件中? this SO answer有一個非常簡單的解決方案。