UIViewController выпущен без viewWillDisappear: вызывается?
У меня есть базовая реализация 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;
}];
}
}
Теперь время от времени я получаю отчеты о сбоях, вызванных этим (приложение для iOS 7):
objc_msgSend() selector name: _setInConflict:
Я подозреваю, что, возможно, контроллер представления был освобожден без viewWillDisappear:
будучи призванным Тогда документ был бы освобожден вместе с ним, не будучи закрытым. Когда конфликт приходит из iCloud, приложение вылетает.
Может быть, это происходит, когда приложение находится в фоновом режиме и не хватает памяти? Есть ли такой сценарий, когда контроллер представления будет освобожден без viewWillDisappear:
вызывается?
РЕДАКТИРОВАТЬ: Чтобы уточнить, это происходит только в производстве, я не смог воспроизвести это сам. Вот почему я предполагаю, что это может быть связано с нехваткой памяти / фоновый сценарий. Я выдал предупреждения о недостаточном объеме памяти в симуляторе, но без удачи.