目标C - 代码在导航控制器中选择时崩溃

时间:2009-07-29 04:19:28

标签: iphone objective-c

这是代码:http://pastie.org/562956

此代码在“didSelectRowAtIndexPath”上调用itemsArray.count时崩溃。我不知道为什么... itemsArray被访问其他方法,如“numberOfRowsInSection”。为什么它会一下子被取消引用(我认为这就是发生的事情)。

这是输出(dunno是什么,“无法读取未知的加载命令0x22”)

[会议开始于2009-07-28 22:11:50 -0600。] 警告 - 找不到“NSUserDefaults-Optimize.m:81”的位置 GNU gdb 6.3.50-20050815(Apple版gdb-966)(2009年3月10日星期二02:43:13) 版权所有2004 Free Software Foundation,Inc。 GDB是免费软件,由GNU通用公共许可证涵盖,您就是 欢迎在某些条件下更改和/或分发它的副本。 输入“show copying”查看条件。 GDB完全没有保修。输入“show warranty”了解详情。 此GDB配置为“i386-apple-darwin”.sharedlibrary apply-load-rules all 附加到过程56173。 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 2009-07-28 22:11:55.545 Send2iPhone [56173:20b]加载项目 2009-07-28 22:11:55.629 Send2iPhone [56173:20b] cellforrow 0 2009-07-28 22:11:55.634 Send2iPhone [56173:20b] value =(null) 2009-07-28 22:11:55.644 Send2iPhone [56173:20b] cellforrow 1 2009-07-28 22:11:55.645 Send2iPhone [56173:20b] value =(null) 2009-07-28 22:11:55.654 Send2iPhone [56173:20b] cellforrow 2 2009-07-28 22:11:55.658 Send2iPhone [56173:20b] value =(null) 2009-07-28 22:11:55.659 Send2iPhone [56173:20b] cellforrow 3 2009-07-28 22:11:55.663 Send2iPhone [56173:20b] value =(null) 2009-07-28 22:11:57.724 Send2iPhone [56173:20b] row = 0 程序接收信号:“EXC_BAD_ACCESS”。 杀 退出

调试器已退出,状态为0.(gdb)

2 个答案:

答案 0 :(得分:2)

您没有声明itemsArray的所有权,因此它在某个时候被自动释放池释放。您可以通过使用正确保留和释放的访问器设置变量来解决此问题。另外,如果还没有,则应阅读Cocoa memory management guidelines

答案 1 :(得分:2)

Chuck说得对,你没有保留阵列。

一个解决方法是使itemsArray成为控制器的属性,所以在标题

@interface RootViewController : UITableViewController {
    NSArray *itemsArray;
    NSString *test;

}

//add the property directive for itemsArray and tell it to use retain
@property (nonatomic, retain) NSArray *itemsArray;

和.m

@implementation RootViewController
// add the synthesize for itemsArray property
@synthesize itemsArray;


// when you set the value of itemsArray use self.itemsArray this will properly retain the array
self.itemsArray = [NSArray arrayWithContentsOfURL:plistURL];


// release the itemsArray in dealloc
- (void)dealloc {
  [itemsArray release];
  [super dealloc];
}