Ipad 在popover仍然可见时到达

Ipad 在popover仍然可见时到达,ipad,uipopovercontroller,Ipad,Uipopovercontroller,当我点击按钮时,应用程序崩溃,我在popover仍然可见时到达了[UIPopopOvercontroller dealloc]。消息。认为自动释放不正确,这里有一个教程 问题是您正在设置 -(void)showsearch:(id)sender { SearchViewController *searchview =[[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];

当我点击按钮时,应用程序崩溃,我在popover仍然可见时到达了
[UIPopopOvercontroller dealloc]。
消息。

认为自动释放不正确,这里有一个教程


问题是您正在设置

-(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];


}
当你想做的时候

settingpopoverController =

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

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

要点是你需要:

  • 将自动删除的popover分配给保留属性
  • 在视图的dealloc中将属性设置为nil
  • 以及在PopOvercontrollerdDismissPopOver中将其设置为零

您似乎混淆了视图和控制器。SearchViewController是控制器,但您称之为视图。@很高兴能提供帮助—1篇博文没有解释海报代码崩溃的原因。这只是一个教程popovers@SanjitSauja,本质上,代码中添加的
自动释放
是导致代码崩溃的原因。要么你
retain
你的
UIPopoverController
要么经历OP询问的崩溃。@Sanjit Saluja,在Obj-c 2.0及更高版本中,第二种语法——假设它是“retain”属性——将在OP调用autorelease的
UIPopoverController
上调用“retain”。否则,当当前方法结束时,
UIPopoverController
将自动删除,达到保留计数0,并被解除锁定。如果您认为我遗漏了什么,请告诉我。
self.settingpopoverController =