presentPopover - EXC_BAD_ACCESS;使用Zombie Objects

时间:2012-11-21 22:55:46

标签: iphone objective-c ios ipad exc-bad-access

我正在尝试让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.viewself.chatPopover的保留计数:

EG。

p (int)[self.view retainCount]

并且它们都很好(> 0)。所以我对这里发生的事情感到非常困惑?

如果有人能提供帮助,我将非常感激。

另外,我在XCode中启用了Zombie Objects(产品>编辑方案>诊断>启用僵尸对象),但我没有在任何僵尸变量上获得任何输出在控制台中。也许我在寻找错误的地方?

对此的任何建议也将受到赞赏。

提前致谢。

2 个答案:

答案 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?