Вызывается UIPopoverController dealloc - среда ARC

При отображении всплывающего контроллера во второй раз (после его закрытия и повторного отображения) я получаю следующую ошибку:

Завершение работы приложения из-за неперехваченного исключения 'NSGenericException', причина: '- [UIPopoverController dealloc] достигнут, пока всплывающее окно все еще отображается. '

Трассировка стека - это только набор шестнадцатеричных значений, и SIGABRT происходит в UIApplicationMain каждый раз. Вот код, который запускается кнопкой:

- (IBAction)createNewScore:(id)sender {
    if (self.pc)
        if (self.pc.popoverVisible)
            return;
        else
        // Breakpoint is hit here—crashes after this line
            [self.pc presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
    NGDocumentInfoViewController *documentInfoVC = [[NGDocumentInfoViewController alloc] initWithBlankDocumentTargetInManagedObjectContext:self.context];
    UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:documentInfoVC];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneCreatingNewScore:)];
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelCreatingNewScore:)];
    navc.navigationBar.topItem.leftBarButtonItem = doneButton;
    navc.navigationBar.topItem.rightBarButtonItem = cancelButton;
    CGSize popoverSize = CGSizeMake(documentInfoVC.view.bounds.size.width, documentInfoVC.view.bounds.size.height);
    documentInfoVC.contentSizeForViewInPopover = popoverSize;
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:navc];
    popover.delegate = self;
    self.pc = popover;
    [popover presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}

Я хотел бы просто сохранить всплывающее окно, которое исправит проблему, но это среда ARC, поэтому я не сохраняю. Есть ли способ исправить ошибку (не отключая ARC для файла и не занимаясь памятью для всего файла вручную)?

Редактировать: Всплывающее окно сохраняется как ivar:

@property (strong) UIPopoverController *pc;

Есть ли у кого-нибудь решение этой проблемы (возможно, переопределение ARC)? Я подам BR, как предлагает CodaFi, но решение все равно было бы неплохим, поскольку это препятствие на пути к крупному проекту. Если такой возможности нет, то я, наверное, раскрою свой.

19
задан FeifanZ 8 November 2011 в 12:45
поделиться