2

重複の可能性:
ポップオーバーがまだ表示されている間に UIPopovercontroller dealloc に達した

ユニバーサル アプリを作成し、カメラ ロールから選択した画像を取得しようとしています。iPhoneで正常に動作し、iPadはポップオーバーを望んでいるので、それを行ってもエラーが発生し続けます

-[UIPopoverController dealloc] reached while popover is still visible.

私は調査しました:

スタック リンク

スタック リンク

そしてグーグル、何もこの問題を解決していません

今立ち往生、アドバイスをいただければ幸いです

ポップオーバー デリゲートを .h に実装しました

.m

 - (void)logoButtonPressed:(id)sender /////////////iPad requires seperate method ////////////////
 {                                        

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

LogCmd();
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
////////
imagePicker.modalPresentationStyle = UIModalPresentationCurrentContext;
////////
[self presentModalViewController:imagePicker animated:YES];


}

else

{

    // We are using an iPad
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.delegate = self;
    UIPopoverController *popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];
    popoverController.delegate=self;


    [popoverController presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];


   }


  }

私も今これを試しました:

.h

 @property (strong) UIPopoverController *pop;

.m

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {            ///code added

LogCmd();
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
[self presentModalViewController:imagePicker animated:YES];


    ///code added////////////////////////////

}

else {

    if (self.pop) {
        [self.pop dismissPopoverAnimated:YES];
    }
    // If usingiPad
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

    UIPopoverController *popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];


    [popoverController presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
4

1 に答える 1

8

ポップオーバーをインスタンス化し、ローカル変数に割り当てます。

UIPopoverController *popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];

メソッドが戻るとすぐに、変数はスコープ外になり、所有者がなくなったため、オブジェクトの割り当てが解除されます。

strongすべきことは、ポップオーバーを割り当てるプロパティを宣言することです。あなたはすでにあなたの財産でそうしていpopます。したがって、必要なことは、ポップオーバーを割り当てるときにプロパティに割り当てることだけです。これにより、オブジェクトの所有者になるため、割り当てが解除されません。

self.pop = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
[self.pop presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

お役に立てれば!

于 2012-10-01T23:01:20.900 に答える