通用 Xcode 相机胶卷应用程序问题

Posted

技术标签:

【中文标题】通用 Xcode 相机胶卷应用程序问题【英文标题】:Universal Xcode Camera Roll App Issue 【发布时间】:2012-09-06 15:55:47 【问题描述】:

我在 Xcode 中有一个通用应用程序。如果用户使用的是 iPad,则使用库中的图像按钮效果很好。但是,如果他们使用 iPhone,则该按钮不起作用。

这是我收到的错误。

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIPopoverController initWithContentViewController:] 在 UIUserInterfaceIdiomPad 下未运行时调用。”

被告知此代码可以工作。它是否进入下面的(IBAction)代码?

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)  Add Popover code here  else      
Add alternative for popover here 

- (IBAction) useCameraRoll: (id)sender


if ([self.popoverController isPopoverVisible]) 
    [self.popoverController dismissPopoverAnimated:YES];

 else 
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    
        UIImagePickerController *imagePicker =
        [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.sourceType =
        UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.mediaTypes = [NSArray arrayWithObjects:
                                  (NSString *) kUTTypeImage,
                                  nil];
        imagePicker.allowsEditing = YES;

        newMedia = NO;
    


【问题讨论】:

【参考方案1】:

发生此崩溃是因为您无法在 iPhone 上使用 UIPopOverControllers,只能在 iPad 上使用。

[UIPopoverController initWithContentViewController:] 时调用 在 UIUserInterfaceIdiom Pad 下运行。'

试试这样的:

- (IBAction)useCameraRoll:(id)sender

    UIPopoverController *popoverController = [[UIPopoverController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    
        UIImagePickerController *imagePicker =
        [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.sourceType =
        UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.mediaTypes = [NSArray arrayWithObjects:
                                  (NSString *) kUTTypeImage,
                                  nil];
        imagePicker.allowsEditing = YES;

        newMedia = NO;
    
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
        if (popoverController.isPopoverVisible) 
            [popoverController dismissPopoverAnimated:YES];
        else
                [popoverController setContentViewController:imagePicker];
                [popoverController setDelegate:self];
                [popoverController presentPopoverFromRect:CGRectMake(0, 0, 320, 320) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        
    else
        [imagePicker presentViewController:imagePicker animated:YES completion:nil];
    

【讨论】:

好的,所以代码给了我一些警告和错误。警告是 popoverController 的本地声明隐藏实例变量。错误是使用了未声明的标识符图像选择器。 @Niche'AdMarketing 我知道这些,我离开它们的唯一原因是让你知道你必须移动一些东西,比如“imagePicker”的声明。由于它包含在 isSourceTypeAvailable "if" 中,因此不能在它之外使用。在你的头文件中声明 imagePicker 应该会静音。 在 .h 中声明 imagePicker 会是这样吗? UIImageView *imagePicker;然后@property(非原子,保留)IBOutlet UIImageView *imagePicker; @Niche'AdMarketing 你不需要@property,这不是UIImageView,它是UIImagePickerController *imagePicker;

以上是关于通用 Xcode 相机胶卷应用程序问题的主要内容,如果未能解决你的问题,请参考以下文章

从 ipad 上的相机胶卷中选择照片需要弹出框控制器错误

将更改的图像保存到相机胶卷时因内存问题而终止

尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS

将应用内视频保存到相机胶卷?

iPhone - 应用程序中的相机胶卷

UISaveVideoAtPathToSavedPhotosAlbum 没有将视频保存到相机胶卷