1

マスターテーブルビューと詳細ビューを備えた分割ビューがあります。分割ビューのマスタービューのナビゲーションバーには、ユーザーがimagePickerを介して写真を撮ることができるボタンがあります。しかし、ボタンを押すとプログラムがクラッシュし続けます。ボタンが押されたときに呼び出されるMasterViewController.mのプロシージャは次のとおりです。

-(void) takePicture:(id) sender
{

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
    [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
}
else
{
    [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}

[imagePicker setDelegate:self];

//[self presentViewController:imagePicker animated:YES completion:nil];

if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    UIPopoverController * popOverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [popOverController presentPopoverFromRect:((UIButton *)sender).frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    //[popOverController presentPopoverFromRect:CGRectMake(700, 1000, 10, 10) inView:self.detailViewController.imageSpace permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}else {

    [self presentViewController:imagePicker animated:YES completion:nil];
}

}

エラーメッセージは次のとおりです。

2013-02-11 09:06:43.975 ImageSplit2[13044:c07] -[UIBarButtonItem frame]: unrecognized selector sent to instance 0x7183d00
2013-02-11 09:06:43.976 ImageSplit2[13044:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIBarButtonItem frame]: unrecognized selector sent to instance 0x7183d00'
4

1 に答える 1

0

senderではなく、ビューUIButtonではないため、プロパティUIBarButtonItemがありません。frame

これを変える:

[popOverController presentPopoverFromRect:((UIButton *)sender).frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

に:

[popOverController presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

補足:フォトライブラリから画像を選択する場合は、iPadでポップオーバーを使用する必要があります。ただし、カメラベースのイメージピッカーをフルスクリーンビューコントローラーとして提示することは完全に有効です。したがって、ifステートメントを次のように変更することをお勧めします。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

に:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && imagePicker.sourceType != UIImagePickerControllerSourceTypeCamera)
于 2013-02-11T18:57:12.040 に答える