这是我第一次在这个网站上提问。作为业余开发人员,我总是在这个网站上找到我的问题的答案,但我找不到我当前的问题。
在我的iPad应用程序中,我从rootView调用一个新的UIViewController:
DisplayTheMapViewController_iPad *root = [[DisplayTheMapViewController_iPad alloc] init];
displayTheMapViewController=root;
[[self navigationController] pushViewController:displayTheMapViewController animated:YES];
[root release];
当我从这个视图返回主视图时,应用程序崩溃(需要一分钟左右,直到那时一切正常,但总是会发生),并发生自动释放池错误。
当我发表评论[root release]时,应用程序仍处于活动状态,但后来我遇到了另一个问题:在第二次访问视图时(不是第一次!)当调用一个方法将一个popover放在视图中时,应用程序崩溃,我收到以下错误:
'弹出窗口无法从没有窗口的视图中显示。'
我必须做错事。我提前感谢你的任何建议。
答案 0 :(得分:1)
这条线有点令人费解:
displayTheMapViewController=root;
我猜测displayTheMapViewController
是一个实例变量?如果是这样,你要为它分配root,但是你没有保留root。当该控制器从导航堆栈弹出时,导航控制器将释放它,导致它被解除分配,因为没有其他任何东西保留它。然后displayTheMapViewController
将指向无效对象。也许你想说:
self.displayTheMapViewController=root;
如果将displayTheMapViewController
属性设置为保留其内容,则可以防止上面的悬空指针问题。
答案 1 :(得分:0)
检查您忘记释放已分配对象的DisplayTheMapViewController_iPad类顶部。
答案 2 :(得分:0)
您没有发布足够的代码来完全诊断问题,但我建议您检查以下行:displayTheMapViewController = root;
。由于您未保留root
,因此在从导航控制器中删除视图控制器后,displayTheMapViewController
将悬空。
关于当你不释放root并重新进入视图时会发生什么,我怀疑这是DisplayTheMapViewController_iPad
的内部结构,只要你有第二个实例。