UIPopoverController dealloc获取调用ARC环境

在第二次显示popup窗口控制器(解散popup窗口然后重新显示之后)时,出现以下错误:

终止应用程序,由于未捕获的exception'NSGenericException',原因:' – [UIPopoverController dealloc]达到popup仍然可见。

堆栈跟踪只是一堆hex,SIGABRT每次都发生在UIApplicationMain。 这是button触发的代码:

- (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]; } 

我只想保留解决问题的popover,但这是一个ARC环境,所以我没有保留。 有没有办法让我来解决这个错误(不要关掉文件的ARC,而是手动为整个文件做内存)?

编辑:popup窗口存储为伊娃:

 @property (strong) UIPopoverController *pc; 

有没有人有这个问题的解决scheme(也许是ARC覆盖)? 我会按照CodaFi的build议提交无线电通信局,但是一个解决scheme仍然会很好,因为这是一个重大项目的障碍。 如果这是不可能的,那么我想我会推出自己的。

我遇到了同样的问题,并通过将popover控制器保留在一个强大的实例variables中来解决这个问题,并且在第二次运行中分配新的popover控制器重置属性之前,明确地解除它。 在你的例子中,你应该添加这样的东西:

 - (IBAction)createNewScore:(id)sender { if (self.pc) { [self.pc dismissPopoverAnimated:YES]; } 

如果您的popup窗口被存储为强引用,则不能将其解除分配。 当它可以被释放的唯一可能性是在包含强引用(在你的例子中是self )的对象也被释放的情况下。

我认为最重要的问题是当popover可见时,你对你的观点做什么。

如果你已经检查过,那肯定是一个框架错误。