2011-07-20 60 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

相关问题