此代码在“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)
答案 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];
}