我正在尝试让presentPopoverFromRect
工作,但由于内存访问不当,我一直在崩溃。 (EXC_BAD_ACCESS)
。
这是代码,最后一行是它崩溃的地方:
- (void)showChat:(id)sender {
chat = [[PopupChatController alloc] initWithStyle:UITableViewStylePlain];
chat.chatDelegate = self;
self.chatPopover = [[UIPopoverController alloc] initWithContentViewController:chat];
CGRect myRect = CGRectMake(50, 0, 225, 25) ;
[self.chatPopover presentPopoverFromRect:myRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
使用gdb我检查了self.view
和self.chatPopover
的保留计数:
EG。
p (int)[self.view retainCount]
并且它们都很好(> 0)。所以我对这里发生的事情感到非常困惑?
如果有人能提供帮助,我将非常感激。
另外,我在XCode中启用了Zombie Objects(产品>编辑方案>诊断>启用僵尸对象),但我没有在任何僵尸变量上获得任何输出在控制台中。也许我在寻找错误的地方?
对此的任何建议也将受到赞赏。
提前致谢。
答案 0 :(得分:0)
此处有变量聊天的内存泄漏。
尝试以下代码并将聊天作为本地变量。
- (void)showChat:(id)sender {
PopupChatController *chat = [[PopupChatController alloc] initWithStyle:UITableViewStylePlain];
chat.chatDelegate = self;
self.chatPopover = [[UIPopoverController alloc] initWithContentViewController:chat];
[chat release]; //since it's retained in the UIPopoverController
CGRect myRect = CGRectMake(50, 0, 225, 25) ;
[self.chatPopover presentPopoverFromRect:myRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
答案 1 :(得分:0)
顺便说一句,您是否将属性chatPopover定义为retain?