消息发送到解除分配的实例

时间:2010-12-28 17:21:44

标签: iphone objective-c cocoa-touch

我有一个使用导航控制器导航到不同视图的应用程序。这就是我正在做的事情:

MapViewController *aMap = [[MapViewController alloc] initWithNibName:@"MapView" 
                                                              bundle:nil ];
[self.navigationController pushViewController:aMap 
                                     animated:YES];
[aMap release];

在用户操作中,我想返回第一个视图。这就是我所做的:

-(void)alertView:(UIAlertView *)alertView 
 didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    [self.navigationController popToRootViewControllerAnimated:NO];
}

当我按下调用波纹管方法的按钮时,我的应用程序会按预期进入第一个视图。但是,当我按下“主页按钮”并尝试重新打开应用程序时,问题就出现了。然后,应用程序崩溃,出现以下错误:

2010-12-23 14:33:18.504 test[4549:307] *** -[MapViewController respondsToSelector:]: message sent to deallocated instance 0x5c26320

据我所知,我向一个不存在的对象实例发送了一条消息,但我发现这不会发生在哪里

你有什么建议吗?

1 个答案:

答案 0 :(得分:13)

在解除分配后,有些东西试图将消息发送到MapViewController。

它们是引用它的任何对象 - 是它的任何子视图的委托,还是接收任何通知,或类似的东西?

如果是这样,您需要确保取消订阅控制器的dealloc方法中的任何通知,并将引用控制器的任何delegate参数(在其他对象上)设置为nil。