2

这是我第一次在这个网站上提问。作为一名业余开发人员,我总是在这个网站上找到我的问题的答案,但我找不到我当前问题的答案。

在我的 iPad 应用程序中,我从 rootView 调用了一个新的 UIViewController:

DisplayTheMapViewController_iPad *root = [[DisplayTheMapViewController_iPad alloc] init];
displayTheMapViewController=root;
[[self navigationController] pushViewController:displayTheMapViewController animated:YES];
[root release];

当我从这个视图返回到主视图时,应用程序崩溃(大约需要一分钟左右,直到那时一切正常,但它总是会发生),并出现自动释放池错误。

当我评论 [root release] 应用程序保持活动状态时,我遇到了一个不同的问题:在我第二次访问视图(不是第一次!)时,当调用在视图中放置弹出框的方法时,应用程序崩溃并且我收到以下错误:

“弹出窗口不能从没有窗口的视图中呈现。”

我必须做错事。我提前感谢您的任何建议。

4

3 回答 3

1

这行有点令人费解:

displayTheMapViewController=root;

我猜这displayTheMapViewController是一个实例变量?如果是这样,您正在为其分配 root,但您没有保留 root。当该控制器从导航堆栈中弹出时,导航控制器将释放它,导致它被释放,因为没有其他东西保留它。displayTheMapViewController然后将指向一个无效的对象。也许你的意思是:

self.displayTheMapViewController=root;

如果该displayTheMapViewController 属性设置为保留其内容,则可以防止上述悬空指针问题。

于 2011-07-05T07:16:27.783 回答
0

您没有发布足够的代码来完全诊断问题,但我建议检查以下行:displayTheMapViewController = root;. 由于您没有保留root,displayTheMapViewController将在视图控制器从导航控制器中删除后悬空。

至于当您不释放 root 并重新进入视图时会发生什么,我怀疑这与DisplayTheMapViewController_iPad您拥有第二个实例时的内部结构有关。

于 2011-07-05T07:20:52.513 回答
0

检查您忘记释放已分配对象的 DisplayTheMapViewController_iPad 类顶部底部。

于 2011-07-05T07:15:41.437 回答