0

Xcode にユニバーサル アプリがあります。ユーザーが iPad を使用している場合、[ライブラリの画像を使用] ボタンはうまく機能します。ただし、iPhone を使用している場合、ボタンは機能しません。

これが私が受け取るエラーです。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。

このコードは機能すると言われました。以下の (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;
    }
}
}
4

1 に答える 1

0

このクラッシュは、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];
    }
}
于 2012-09-06T16:12:57.987 に答える