0

所以我正在编写这个 iPad 应用程序,它从主屏幕开始,然后你可以从那里转到设置页面。UIImagePickerController在设置页面中,您可以使用弹出视图从相册中选择图片。

如果我进入设置页面,然后按后退按钮返回主页,一切都会按预期工作。但是如果我去设置并选择一个图像页面上的后退按钮不会让我回到主页。

弹出窗口UIImagePickerController似乎工作正常,所以我不知道是什么原因造成的。这是我的代码UIImagePickerController

- (IBAction)imagePick1:(id)sender {
    pickerController = [[UIImagePickerController alloc] init];
    [pickerController setDelegate:self];
    [pickerController setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
    [pickerController setAllowsEditing:NO];

    popoverController = [[UIPopoverController alloc] initWithContentViewController:pickerController];
    [popoverController setDelegate:self];
    [popoverController presentPopoverFromRect:[[self imageButton1] frame] inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

...

- (void)imagePickerController:(UIImagePickerController *)pickerController1 didFinishPickingMediaWithInfo:(NSDictionary *)info

{
    image1 = [info objectForKey:UIImagePickerControllerOriginalImage];      
    _image1.image = image1;

    [popoverController dismissPopoverAnimated:YES];
}

当我尝试按下后退按钮时,应用程序冻结并且不再响应任何命令。我究竟做错了什么?

编辑:我再次运行它,这是按下后退按钮时我在日志中遇到的错误。

-[__NSCFType dismissPopoverAnimated:]: unrecognized selector sent to instance 0x7128cd0

这也是我的头文件的开头。

@interface ViewController : UIViewController
<UIPickerViewDataSource, UIPickerViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate>{
    UIPopoverController *popoverController;
}
@property (nonatomic, retain) UIPopoverController *popoverController; 
4

1 回答 1

0

可能重复。看这里

您是否像下面一样在头文件中声明了委托?还请确保您的代理也符合 UINavigationControllerDelegate,因为 UIImagePickerControllerDelegate 直接继承自 UINavigationControllerDelegate,但是所有 UINavigationControllerDelegate 方法都是可选的。

@interface MyViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

编辑:根据您的编辑,您似乎还需要将“UIPopoverControllerDelegate”添加到您的头文件中。您还需要[popoverController setDelegate:self]在分配后添加。

编辑 2:好的,现在您还需要在您的实现 (.m) 文件中声明此方法。

并返回是。

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController {
    return YES;
}

编辑 3:为什么您将dismissPopoverAnimated 设置为NO 并在popoverController 仍在显示时释放它?

[popoverController dismissPopoverAnimated:NO];
[popoverController release];

尝试将dismissPopoverAnimated 设置为YES 并暂时删除该版本。顺便说一句,popoverController 是否作为属性保留在您的头文件中?你在用ARC吗?如果您使用的是 ARC,则不应在 popoverController 上调用 release。

编辑4:

尝试将标题修改为:

UIPopoverController *_popoverController;

@property (nonatomic, retain) UIPopoverController *popoverController

并添加@synthesize popoverController = _popoverController;到您的实现文件中。

现在开始在你的实现文件中用“_popoverController”替换所有“popoverController”实例。

也替换 [popoverController dismissPopoverAnimated:YES];

if(_popoverController != nil)
    [_popoverController dismissPopoverAnimated:YES];

让我知道下面的结果。

于 2013-05-24T02:41:05.893 回答