弹出错误 - [UIPopoverController dealloc] 在弹出仍然可见时达到 [重复]

Posted

技术标签:

【中文标题】弹出错误 - [UIPopoverController dealloc] 在弹出仍然可见时达到 [重复]【英文标题】:Pop Over Error -[UIPopoverController dealloc] reached while popover is still visible [duplicate] 【发布时间】:2012-10-01 22:00:02 【问题描述】:

可能重复:UIPopovercontroller dealloc reached while popover is still visible

我正在创建一个通用应用程序并尝试从相机胶卷中选择一张图片。在 iPhone 上运行良好,iPad 想要弹出,所以已经这样做了,现在一直出错

-[UIPopoverController dealloc] reached while popover is still visible.

我研究过:

Stack Link

Stack Link

和谷歌,没有解决这个问题

现在卡住了,感谢任何建议

我已经在 .h 中实现了弹出框委托

.m

 - (void)logoButtonPressed:(id)sender /////////////iPad requires seperate method ////////////////
                                         

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

LogCmd();
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
////////
imagePicker.modalPresentationStyle = UIModalPresentationCurrentContext;
////////
[self presentModalViewController:imagePicker animated:YES];




else



    // We are using an iPad
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.delegate = self;
    UIPopoverController *popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];
    popoverController.delegate=self;


    [popoverController presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];


   


  

我现在也试过这个:

.h

 @property (strong) UIPopoverController *pop;

.m

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)             ///code added

LogCmd();
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
[self presentModalViewController:imagePicker animated:YES];


    ///code added////////////////////////////



else 

    if (self.pop) 
        [self.pop dismissPopoverAnimated:YES];
    
    // If usingiPad
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

    UIPopoverController *popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];


    [popoverController presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

【问题讨论】:

试试第二个链接 Carl,我已经看过这就是为什么我在我的问题中提出已经研究过的原因 是的,但这是正确的答案。尽管为了公平起见,您必须阅读 cmets。事实上,我可能只是编辑答案。您正在分配弹出框,然后将其分配给局部变量,该变量超出范围并且弹出框被释放。拥有该属性的目的是将弹出框分配给它。所以不要做UIPopoverController *popoverController = [[UIPopoverController alloc] ...,而是self.pop = [[UIPopoverController alloc] ... 我在那里添加了答案,我不得不承认它有点混乱并且与代码不匹配,所以我很抱歉。 感谢 Carl,我根据您的指导更改了我的代码,4 小时后它终于可以工作了!非常感谢你!,你能把这个作为答案,这样我就可以接受它并带来兄弟情谊吗? 【参考方案1】:

您在此处实例化弹出框并将其分配给局部变量:

UIPopoverController *popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];

只要方法返回,变量就会超出范围,并且对象将被释放,因为它不再具有所有者。

你应该做的是声明一个strong 属性来分配弹出框。您已经使用 pop 属性完成了此操作。所以现在您需要做的就是在分配弹出框时,将其分配给您的属性。这使您成为对象的所有者,因此它不会被释放。

self.pop = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
[self.pop presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

希望这会有所帮助!

【讨论】:

确实非常感谢,解释清楚了……终于整理好了! 很高兴我能帮上忙!

以上是关于弹出错误 - [UIPopoverController dealloc] 在弹出仍然可见时达到 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ipad - 关闭 UIPopoverController

为啥网页上总会弹出有错误的对话框?

安装mysql出现错误,弹出如下截图

为啥电脑每次开机都会弹出“函数错误”的窗口?

ipad UIImagePickerController 在预览和拍照时大小不同

做一个问题,如果输入的答案正确则弹出正确,错误弹出错误