UIPopoverController 的奇怪错误

Posted

技术标签:

【中文标题】UIPopoverController 的奇怪错误【英文标题】:Strange Error With UIPopoverController 【发布时间】:2012-03-26 03:59:50 【问题描述】:

我正在尝试使用 UIImagePickerController 从用户 iPhone / iPad 上的照片中抓取照片。这段代码在 iPhone 上运行得很好,但是当我在 iPad 上运行它时,调试器给了我消息“由于未捕获的异常 'NSGenericException' 导致应用程序终止,原因:'-[UIPopoverController dealloc] 在弹出窗口仍然可见时达到。”。我对 Objective-C 很陌生,所以我不确定是什么原因造成的,我没有释放任何东西,我打开了 ARC。这是我的代码: 视图控制器.m

#import "PhotoViewController.h"


@implementation PhotoViewController
@synthesize grabButton;
@synthesize image;
@synthesize imgPicker;

- (IBAction)grabImage 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
        UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker];
        [popover presentPopoverFromRect:self.image.bounds inView:self.image permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

     else 
        [self presentModalViewController:imgPicker animated:YES];
    


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo 
    image.image = img;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];


- (void)viewDidLoad

    self.imgPicker = [[UIImagePickerController alloc] init];
    self.imgPicker.allowsImageEditing = YES;
    self.imgPicker.delegate = self;
    self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.


【问题讨论】:

可能的欺骗:***.com/questions/8895071/… 发帖前我看过了,可惜没用。 【参考方案1】:

UIPopover 是一个丑陋的拼凑对象。它必须是一个强大的属性和一个 iVar,以确保不会过早地达到 Dealloc。在 .h 中添加这个像这样:

@interface MyClass: NSObject 
    UIPopover *_popover;

@property (nonatomic, strong) UIPopover * popover;

//.m 

@synthesize popover = _popover;

实例化弹出框时,将其分配给属性或实例:

self.popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker];

_popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker];

【讨论】:

非常感谢!我应该删除哪个类?对不起,我是编程新手。另外,我添加了您在上面发布的所有更改,但仍然发生相同的错误。 当您添加属性或 iVar(就像我们上面所做的那样)时,您必须删除任何名称冲突的 iVar,否则它们会掩盖您在 .h 中声明的 iVar。只需从您的 .m 文件中删除任何提及 UIPopover(这个词,而不是对象)的内容。 alloc 除外(抱歉,应该提到这一点)。所以,它看起来像这样:popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 啊,好的,谢谢,它现在工作得很好!非常感谢您的帮助! 没问题。欢迎来到堆栈!

以上是关于UIPopoverController 的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 上的 UIPopoverController 和键盘导致奇怪的动画

UIPopoverController 奇怪的调整大小行为

当键盘出现时,UIPopoverController 在 iOS 7 上奇怪地移动

如何使 UIPopoverController 自动改变其箭头方向

添加到 UIPopoverController 时,UIImagePickerController 中缺少导航按钮

可编辑的 UITextView 可以嵌入到 UIPopoverController 中吗?