我有UITableViewController
的基本实现,提供了UIDocument
。对文档的引用保留为视图控制器的实例变量。
在viewWillDisappear:
中,如果删除了视图控制器(而不是推送到堆栈的子视图控制器),我会关闭文档:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (!self.keepDocumentOpenAfterNavigatingAway) {
[self.deckDocument closeWithCompletionHandler:^(BOOL success){
// As side effect, this retains 'self' until
// the document is closed:
self.document = nil;
}];
}
}
现在,偶尔我会收到由此引起的崩溃报告(app适用于iOS 7):
objc_msgSend() selector name: _setInConflict:
我怀疑可能在没有调用viewWillDisappear:
的情况下取消分配视图控制器。然后,文档将与其一起被释放,而不会被关闭。当冲突来自iCloud时,应用程序崩溃。
当应用程序处于后台并且内存不足时,可能会发生这种情况?是否存在视图控制器在未调用viewWillDisappear:
的情况下取消分配的情况?
编辑:为了澄清,这只发生在制作中,我自己无法重现。这就是为什么我假设它可能与低内存/背景情况有关。我在模拟器中发出了低内存警告,没有任何运气。