我正在开发一个iPhone应用程序,我在访问委托上定义的一个NSArray时遇到问题。
我的应用有两个标签。这两个选项卡有一个UITableView。我在委托中定义的一个NSArray上有这些表的数据源。
当我加载应用程序时,第一个选项卡正确加载所有内容。这是第一个标签控制器代码的一部分:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
mainAppDelegate *delegate = [[UIApplication sharedApplication]delegate];
return [delegate.dataArray count];
}
当调试器在return语句中时,我可以看到dataArray有9个元素。代码工作正常。
当我单击第二个选项卡时,在第二个选项卡控制器中执行相同的代码。但是当调试器在return语句中时,我可以看到委托不是null而dataArray显示
{(int)[$ VAR count]}个对象
下一步,程序崩溃,提供EXC_BAD_ACCESS
我认为在这一点上dataArray已经发布,但我不知道何时发布。我删除了对dealloc函数的dataArray释放调用。
这是dataArray的属性定义:
@property (nonatomic, retain) NSArray *dataArray;
任何人都有任何想法?我完全迷失了。谢谢你的帮助!
答案 0 :(得分:0)
根据您的评论,您可以像这样初始化数组:
dataArray = [dict objectForKey:@"data"];
由于您直接访问ivar而不是属性,因此不保留数组。你应该这样做:
self.dataArray = [dict objectForKey:@"data"];
一些程序员喜欢用不同的ivar名称合成他们的属性以避免这样的错误。
@synthesize dataArray = dataArray_;
答案 1 :(得分:0)
在你的评论中你刚才说dataArray是servlet的响应,你用json-framework解析它。
这听起来像你的dataArray对象只存储对传入的外部数组对象的引用。
您还没有发布太多代码。你能说明你的dict对象被初始化了吗?
您的外部对象可能会被释放,导致EXC_BAD_ACCESS