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: вызывается?

РЕДАКТИРОВАТЬ: Чтобы уточнить, это происходит только в производстве, я не смог воспроизвести это сам. Вот почему я предполагаю, что это может быть связано с нехваткой памяти / фоновый сценарий. Я выдал предупреждения о недостаточном объеме памяти в симуляторе, но без удачи.

0 ответов

Другие вопросы по тегам