ユーザーがボタンを押したときにポップオーバーに表示する UIImagePickerController があります。これは iPad シミュレーターでは完全に正常に機能しますが、実際のテスト デバイスで同じことを実行しようとするとNSRangeException
、イメージ ピッカーの alloc/init 行でエラーが発生します。
imagePicker = [[UIImagePickerController alloc] init];//Crashes here on device
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
imagePicker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) (kUTTypeImage), nil];
クラッシュメッセージは次のとおりです。
* キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。
デバッグ モードで行をステップ オーバーしようとすることで、その正確な行であると判断しました。その特定の行をステップ オーバーすると、例外がスローされます。
編集:
この問題を 100% 再現する基本的なプロジェクトを作成できたので、これは私のコードの問題ではなく、iOS のバグだと思います。
- 新しいプロジェクトを作成します。シングル ビュー アプリケーションを選択します。絵コンテかxibベースかは問わない
- iPad の xib/ストーリーボードを開き、ビューに roundrectbutton を追加します
次の IBAction をビュー コントローラーに追加します。 イヴァル
pickerPopoverController
です__strong
-(void)iMakeItCrash:(UIButton*)sender { UIImagePickerController* ip = [[UIImagePickerController alloc] init]; ip.delegate = self; ip.allowsEditing = YES; ip.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; ip.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) (kUTTypeImage), nil]; pickerPopoverController = [[UIPopoverController alloc] initWithContentViewController:ip]; [pickerPopoverController presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }
この IBAction をボタンの Touch Up Inside イベントに接続します。
- シミュレーターで動作、iPad でクラッシュ
EDIT2:
を使用しようとすると、クラッシュが発生しますpresentPopoverFromBarButtonItem:
。ただし、画像ピッカーをまったく表示しなくてもクラッシュしません...