【问题标题】:Universal Xcode Camera Roll App Issue通用 Xcode 相机胶卷应用程序问题
【发布时间】: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;
    }
}
}

【问题讨论】:

    标签: iphone ipad camera xcode4.3 ios-universal-app


    【解决方案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;
    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 2021-11-06
    • 2013-03-18
    • 2013-03-21
    • 2015-03-03
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多