弹出窗口仍可见时已达到

6
-(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.消息。

你似乎混淆了视图控制器。SearchViewController是一个控制器,但你称它为视图。 - Ross
3个回答

6

3
问题在于你正在设置
settingpopoverController =

当你想要做某件事情时

self.settingpopoverController =

自动释放池适用的情况是:第二行代码使用属性访问器,而第一行直接使用 iVar。


@Sanjit Saluja,在Obj-c 2.0及更高版本中,第二种语法(假设它是一个“retain”属性)将在OP调用autorelease的UIPopoverController上调用“retain”。否则,当当前方法结束时,UIPopoverController将被自动释放,引用计数为0,并被dealloc。如果您认为我漏掉了什么,请告诉我。 - Dan Rosenstark

3

@saturngod 很高兴能够帮助。 - Aaron Saunders
博客文章没有解释为什么发布者的代码崩溃了。它只是一个关于弹出窗口的教程。 - Sonny Saluja
1
@Sanjit Sauja,实际上在代码中添加“autorelease”才会导致代码崩溃。要么您将保留您的“UIPopoverController”,要么就会遇到OP所提问的崩溃问题。 - Dan Rosenstark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接