2011-07-20 84 views
3

我有一個名爲「myData」的NSDictionary對象,我試圖從UITableViewDelegate方法「didSelectRowAtIndexPath」中訪問它。應用程序在訪問NSDictionary的值時崩潰,但在訪問其密鑰時不會崩潰?

我可以精細地執行這些操作:

if(myData == nil) { /* it doesn't print here, so it's not nil */ } 
NSLog(@" * Keys: %@", [myData allKeys]); // Outputs all of the keys. 

但是,如果我嘗試執行這些操作中,App沒有警告,錯誤或任何種類的輸出崩潰:

[myData objectForKey:@"akey"]; 
[myData allValues]; 

任何人都有一個想法可能是什麼原因造成的?

+0

向我們展示瞭如何構建字典的代碼將會很有幫助 – bshirley

+0

它直接從JSON中填充並通過Message類的存儲變量(這是一個Array)傳遞到我的View Controller中作爲回調的回調一個ASIHTTPRequest對象。 – TigerTrussell

回答

1

聽起來像myData是不包含有效的參考。你在閱讀後放開它還是忘了保留它?

[更新]:爲了安全起見,排除這一點只需在創建字典(僅用於測試!)後再保留一個,並檢查崩潰是否消失。如果不是,也許其他一些變量覆蓋你的myData。設置兩個斷點,一個位於字典分配給myData的位置,另一個位於崩潰點之前。檢查您是否看到合理的摘要,例如「2個密鑰對」。

+0

說實話,我的記憶力管理技巧並不合格。我在考慮這可能是這樣,除了兩件事:1)它爲什麼仍然會顯示鍵?這是因爲內存已被釋放但未被覆蓋? 2)爲什麼我沒有收到EXC_BAD_ACCESS錯誤? – TigerTrussell

+0

你是對的,我也期待一個EXC_BAD_ACCESS。看到我上面的更新。 – Kay

+0

我試圖保留它無濟於事。我甚至做了myData = [[[msg.storage objectAtIndex:0] copy] retain]並且什麼也沒有:(。 – TigerTrussell

相關問題