这是我第一次在这个网站上提问。作为一名业余开发人员,我总是在这个网站上找到我的问题的答案,但我找不到一个解决我目前的问题的答案。
在我的iPad应用程序中,我从rootView调用一个新的UIViewController:
DisplayTheMapViewController_iPad *root = [[DisplayTheMapViewController_iPad alloc] init];
displayTheMapViewController=root;
[[self navigationController] pushViewController:displayTheMapViewController animated:YES];
[root release];
当我从这个视图返回到主视图时,应用程序崩溃(大约需要一分钟,在此之前一切正常,但总是会发生),并出现自动释放池错误。
当我注释root release时,应用程序仍然有效,但是我有一个不同的问题:在我第二次访问视图时(不是第一次!)当调用将弹出窗口放在视图中的方法时,应用程序崩溃,我得到以下错误:
‘不能从没有窗口的视图中呈现弹出式视图。’
我一定是做错了什么。我提前感谢您的任何建议。
发布于 2011-07-05 15:16:28
这一行有点让人费解:
displayTheMapViewController=root;
我猜displayTheMapViewController
是一个实例变量?如果是这样,您将为其分配root,但不会保留root。当该控制器从导航堆栈中弹出时,导航控制器将释放它,导致它被释放,因为没有其他控制器保留它。然后,displayTheMapViewController
将指向无效的对象。也许你的意思是说:
self.displayTheMapViewController=root;
如果将displayTheMapViewController
属性设置为保留其内容,就可以避免上面的悬空指针问题。
发布于 2011-07-05 15:15:41
检查您的DisplayTheMapViewController_iPad类顶部底部是否忘记释放已分配的对象。
发布于 2011-07-05 15:20:53
您没有发布足够的代码来完全诊断问题,但我建议您检查下面这行:displayTheMapViewController = root;
。由于您没有保留root
,因此在从导航控制器中删除视图控制器后,displayTheMapViewController
将会悬空。
至于当您没有释放根目录并重新进入视图时会发生什么,我怀疑这与DisplayTheMapViewController_iPad
的内部结构有关,一旦您有了它的第二个实例。
https://stackoverflow.com/questions/6579048
复制相似问题