popover仍然可见时

问题描述:

-(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.消息。popover仍然可见时

+0

你似乎在混合*查看*和*控制器*。 SearchViewController是一个控制器,但你称它为一个视图。 – Ross 2010-10-24 16:13:42

+0

您的意思是? – saturngod 2010-10-24 16:13:34

+1

明白了。我删除autorelease,它工作正常。 – saturngod 2010-10-24 16:14:40

+0

@saturngod很乐于帮助 – 2010-10-24 16:17:21

问题是你设置

settingpopoverController = 

当你的意思做

self.settingpopoverController = 

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

+0

访问器?真? – 2011-04-30 00:23:28

+0

@Sanjit Saluja,在Obj-c 2.0及更高版本中,第二种语法(假设它是“retain”属性)将在OP调用autorelease的“UIPopoverController”上调用“retain”。否则,当前方法结束时,UIPopoverController被自动释放,达到保留计数0,并被解除分配。如果您认为我错过了某些东西,请告诉我。 – 2011-04-30 06:41:48

这里有关于这个主题的一些良好的讨论:

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

UIPopoverController and memory management

它的要点是你需要:

  • 您自动释放酥料饼分配给保留物业
  • 将物业设置为无视图的交易loc
  • 以及在popoverControllerDidDismissPopover中将其设置为零。