【问题标题】:reached while popover is still visible在弹出窗口仍然可见时到达
【发布时间】:2010-10-24 16:07:58
【问题描述】:
-(void)showsearch:(id)sender
{
    SearchViewController *searchview =[[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];

    settingpopoverController = [[[UIPopoverController alloc] 
                                    initWithContentViewController:searchview] autorelease];               
    [searchview release];
    [settingpopoverController presentPopoverFromBarButtonItem:sender 
                                    permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];


}

当我点击按钮时,应用程序崩溃,我收到[UIPopoverController dealloc] reached while popover is still visible. 消息。

【问题讨论】:

  • 您似乎混淆了 view 和 controller。 SearchViewController 是控制器,但你称它为视图。

标签: ipad uipopovercontroller


【解决方案1】:

这里有一些关于这个话题的很好的讨论:

Retain/release pattern for UIPopoverController, UIActionSheet, and modal view controllers?

UIPopoverController and memory management

要点是你需要:

  • 将自动释放的弹出框分配给一个保留属性
  • 在视图的 dealloc 中将该属性设置为 nil
  • 以及在 popoverControllerDidDismissPopover 中将其设置为 nil。

【讨论】:

    【解决方案2】:

    【讨论】:

    • @saturngod 很高兴为您提供帮助
    • -1 博文没有解释发布者的代码崩溃的原因。它只是弹出框的教程
    • @Sanjit Sauja,本质上是在代码中添加autorelease 是导致代码崩溃的原因。要么你 retain 你的 UIPopoverController 要么体验 OP 询问的崩溃。
    【解决方案3】:

    问题是你设置

    settingpopoverController =
    

    当你想做的时候

    self.settingpopoverController =
    

    自动释放是正确的。第二个使用属性访问器,第一个只使用 iVar。

    【讨论】:

    • @Sanjit Saluja,在 Obj-c 2.0 及更高版本中,第二种语法——假设它是一个“保留”属性——将在 OP 调用 autorelease 的UIPopoverController 上调用“保留” .否则,当当前方法结束时,UIPopoverController 被自动释放,保留计数为 0,并被释放。如果您认为我遗漏了什么,请告诉我。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2014-10-03
    相关资源
    最近更新 更多