Сбой UIPopoverController на iPad под управлением iOS 5.0.1? - PullRequest
0 голосов
/ 13 декабря 2011

Я использую UIImagePickerController на iOS 5 с iPad, и мое приложение только что было отклонено из-за его отказа. Он не падает с моей стороны, но я уверен, что это связано с UIPopoverController.

Пожалуйста, просто укажите, что выглядит плохо!

Чтобы показать UIImagePickerController:

- (IBAction)photoLibraryiPad {
if (popoverController) {
    if ([self.popoverController isPopoverVisible]) {
        [self.popoverController dismissPopoverAnimated:YES];
        [popoverController setDelegate:nil];
        [popoverController release];
    }
} else {
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    {
        UIImagePickerController *imagePicker =
        [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.sourceType =
        UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.allowsEditing = YES;

        self.popoverController = [[UIPopoverController alloc]
                                  initWithContentViewController:imagePicker];

        popoverController.delegate = self;

        [self.popoverController presentPopoverFromRect:photolibrarybutton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

        [imagePicker release];
    }
}

}

Тогда вот где он терпит крах:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    if ([self.popoverController isPopoverVisible]) {
    [self.popoverController dismissPopoverAnimated:YES];
    [popoverController setDelegate:nil];
    [popoverController release];
}

    [noimageAvailable setHidden:YES];
    UIImage *originalImage = (UIImage *) [info objectForKey:
                                     UIImagePickerControllerEditedImage];  
    [imgPic setImage:originalImage forState:UIControlStateNormal];
    // Hide picker selector
    [picker dismissModalViewControllerAnimated: YES];
    [picker release];

}

1 Ответ

2 голосов
/ 13 декабря 2011

Две вещи:

1) Когда вы отпускаете поповер, вы должны установить делегата на ноль. popoverController.delegate = nil перед звонком [popoverController release]. Скорее всего, если вы попытаетесь использовать сборщик несколько раз, он тоже рухнет. Делегат вызывает объект, который больше не существует.

2) Проверяя, виден ли поповер, убедитесь, что он существует в первую очередь.

...