弹出错误 - [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] 在弹出仍然可见时达到 [重复]的主要内容,如果未能解决你的问题,请参考以下文章