0

そこで私は、メイン画面で起動し、そこから設定ページに移動できるこの iPad アプリを作成しています。UIImagePickerController設定ページでは、ポップオーバー ビューでを使用してフォト アルバムから写真を選択できます。

設定ページに移動し、戻るボタンを押してメイン ページに戻ると、すべてが期待どおりに機能します。しかし、設定に移動して画像を選択すると、ページの戻るボタンでメイン ページに戻ることができません。

ポップオーバーUIImagePickerControllerは正常に機能しているように見えるので、何が原因なのかわかりません。これが私のコードですUIImagePickerController

- (IBAction)imagePick1:(id)sender {
    pickerController = [[UIImagePickerController alloc] init];
    [pickerController setDelegate:self];
    [pickerController setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
    [pickerController setAllowsEditing:NO];

    popoverController = [[UIPopoverController alloc] initWithContentViewController:pickerController];
    [popoverController setDelegate:self];
    [popoverController presentPopoverFromRect:[[self imageButton1] frame] inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

...

- (void)imagePickerController:(UIImagePickerController *)pickerController1 didFinishPickingMediaWithInfo:(NSDictionary *)info

{
    image1 = [info objectForKey:UIImagePickerControllerOriginalImage];      
    _image1.image = image1;

    [popoverController dismissPopoverAnimated:YES];
}

戻るボタンを押そうとすると、アプリがフリーズし、それ以上コマンドに応答しなくなります。私は何を間違っていますか?

編集:もう一度実行しましたが、これは戻るボタンを押したときにログに記録されたエラーです。

-[__NSCFType dismissPopoverAnimated:]: unrecognized selector sent to instance 0x7128cd0

また、ここに私のヘッダーファイルの始まりがあります。

@interface ViewController : UIViewController
<UIPickerViewDataSource, UIPickerViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate>{
    UIPopoverController *popoverController;
}
@property (nonatomic, retain) UIPopoverController *popoverController; 
4

1 に答える 1

0

重複の可能性あり。こちらをご覧ください

以下のようにヘッダーファイルでもデリゲートを宣言していますか?また、UIImagePickerControllerDelegate は UINavigationControllerDelegate から直接継承されるため、デリゲートが UINavigationControllerDelegate にも準拠していることを確認してください。ただし、すべての UINavigationControllerDelegate メソッドはオプションです。

@interface MyViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

編集:編集に基づいて、ヘッダーファイルに「UIPopoverControllerDelegate」も追加する必要があるようです。[popoverController setDelegate:self]また、割り当て後に追加する必要があります。

編集 2: では、このメソッドも実装 (.m) ファイルで宣言する必要があります。

はいを返します。

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController {
    return YES;
}

編集 3: なぜ、dismissPopoverAnimated を NO に設定し、まだ表示されている間に popoverController を解放しているのですか?

[popoverController dismissPopoverAnimated:NO];
[popoverController release];

disconnectPopoverAnimated を YES に設定して、今のところリリースを削除してみてください。ところで、popoverController はヘッダー ファイルのプロパティとして保持されますか? ARCを使用していますか?ARC を使用している場合は、popoverController で release を呼び出すべきではありません。

編集4:

ヘッダーを次のように変更してみてください。

UIPopoverController *_popoverController;

@property (nonatomic, retain) UIPopoverController *popoverController

@synthesize popoverController = _popoverController;実装ファイルに追加します。

実装ファイルで「popoverController」のすべてのインスタンスを「_popoverController」に置き換え始めます。

また [popoverController dismissPopoverAnimated:YES];

if(_popoverController != nil)
    [_popoverController dismissPopoverAnimated:YES];

以下の結果を教えてください。

于 2013-05-24T02:41:05.893 に答える