objective-c - 弹出错误 - [UIPopoverController dealloc] 在弹出窗口仍然可见时到达

标签 objective-c ios xcode ipad uipopovercontroller

<分区>

Possible Duplicate:
UIPopovercontroller dealloc reached while popover is still visible

我正在创建一个通用应用程序并尝试从相机胶卷中选择一张图片。在 iPhone 上工作正常,iPad 需要一个弹出窗口,所以已经这样做了,现在不断出现错误

-[UIPopoverController dealloc] 在 popover 仍然可见时到达。

我研究过:

Stack Link

Stack Link

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

卡住了,感谢任何建议

我在 .h 中实现了 popover 委托(delegate)

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

最佳答案

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

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

希望这对您有所帮助!

关于objective-c - 弹出错误 - [UIPopoverController dealloc] 在弹出窗口仍然可见时到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12681733/

相关文章:

ios - 如何解决此 Spritekit (Swift 3) 错误?

iPhone, "More than maximum 5 filtered album lists trying to register. This will fail."错误

iphone - 仅允许将 UITabViewController 中的一个选项卡的方向更改为横向

ios - 如何在 iOS 上增加 MIDI 合成器音量/增益而不失真?

ios - 如何在 iOS 的 uitableviewcell 中显示消息和图像

ios - 删除除命名之外的所有 subview

ios - 如何向iOS模拟器发送模拟远程通知?

iphone - 如何访问变量的值

android - 为什么在添加依赖项后从导入行重定向时 http.dart 文件显示为空,而且 http.get(url) 方法未完成

iOS:删除左侧 uibarbuttonitem 之间的间隙