didSelectRowAtIndexPath生成EXC_BAD_ACCESS,而willSelectRowAtIndexPath工作正常UITableView
我开始与iPhone开发,并有一个编程UITableView是一个常规的UIViewController的子部分的问题。didSelectRowAtIndexPath生成EXC_BAD_ACCESS,而willSelectRowAtIndexPath工作正常UITableView
的问题:。
当攻一排,在didSelectRowAtIndexPath方法产生EXC_BAD_ACCESS(我检查了正确的方法签名而如果我提出这个方法的身体willSelectRowAtIndexPath它工作正常,这似乎是错误的对我来说,因为所有的文档/模式都使用didSelectRowAtIndexPath。好的,真正奇怪的是该方法是否被调用。当然,如果下面的日志输出没有记录,那么该方法没有运行,所以我可以把任何代码编译在那里,它不会运行。那么为什么是异常呢?另外,我发现很难确认它是否与一个过早释放的对象有关,因为当移动到willSelectRowAtIndexPath时程序运行良好。也许有一些对象(重新)分配i意志和阶段之间?
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CommentViewController *commentViewController = [[CommentViewController alloc] initWithNibName:@"CommentViewController" bundle:nil];
Comment *selectedComment = [[Comment alloc] init];
selectedComment = [self.message.comments objectAtIndex:indexPath.row];
commentViewController.comment = selectedComment;
[self presentModalViewController:commentViewController animated:YES];
[selectedComment release];
[commentViewController release];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"This method is never called ... as I don't see this log output ... ");
}
的设置:
的UITableView的如在IB的元素创建的,并且被连接为在UIViewController中的参考变量。 UIViewController被设置为数据源和UITableView的委托。到目前为止,UIViewController视图加载,并且UITableView正确加载了单元格。这意味着数据源的委托方法至少可以正常工作。
下一步:
所以现在我想点击一行,并加载了另一个视图(无论是模态或什么的,它不真正的问题现在)和BOOM,与EXC_BAD_ACCESS模拟器崩溃报道安慰。
真的可以使用这个指针。感谢一个工厂提前给你的帮助!
马特
didSelectRowAtIndexPath
,因为你勾起willSelectRowAtIndexPath:
模态的视图,其冻结的tableview,并防止它发送消息到其委托/数据源是永远不会被调用在上面的代码。
这里是你崩溃的原因:
Comment *selectedComment = [[Comment alloc] init]; // creates new object
selectedComment = [self.message.comments objectAtIndex:indexPath.row]; // assigns a different existing object. Newly created object never used and leaking
commentViewController.comment = selectedComment; // set to assigned existing
[self presentModalViewController:commentViewController animated:YES];
[selectedComment release] // BINGO! you release the assigned object
你的崩溃是由上面的BINGO线引起的。您将已初始化的Comment
对象与数组返回的其他完全不相关的Comment
对象混淆。您释放从数组返回的对象Comment
,而不曾保留它。该对象然后死亡,任何尝试访问它随后导致崩溃。
嗨TechZen,感谢您的帮助工厂。我似乎已经遭受了两件事,确实是你的建议有帮助,我将代码移回到了......并完全移除了意愿...方法。我也有一个奇怪的结果,我的断点没有得到尊重,我在这里调用(http://www.innerexception.com/2008/05/in-xcode-orange-breakpoint-means-gdb.html)。最后,这个方法实际上会中断,我可以检查发生了什么。我现在仍然不是100%,为什么它现在可以工作,而不是当我最初使用的时候...确实呈现模式。 Anyhoo感谢您的帮助! – Matthew 2010-08-09 12:54:57