Подтвердить что ты не робот

Критическое предупреждение без каких-либо результатов Google [В Simulator]

Я получаю это предупреждение в своем проекте iOS: (iOS7, XCode 5 GM)

Предупреждение: невозможно создать файл маркера прогресса восстановления

Я работаю над viewcontroller, который становится черным, когда я получаю это предупреждение при запуске. Иногда помогает удаление приложения и перезапуск XCode. Я возвращаю NO на обоих

-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:
-(BOOL)application:(UIApplication *)application shouldSaveApplicationState:

Update1: Я тестировал iPhone4s. Тот же результат. Предупреждение и черный экран на моем контроллере просмотра.

Update2: Ответил мой собственный вопрос на черный экран. Предупреждение просто исчезло в последних версиях iOS 7.0.x.

4b9b3361

Ответ 1

Я не нашел, почему это сообщение печатается на консоли, но я думаю, что это была некоторая ошибка в iOS. С последними обновлениями iOS 7 я больше не получаю "Предупреждение: невозможно создать восстановление в файле маркеров прогресса".

Более интересная часть - черный экран. Это происходит, когда у вас есть обычный ViewController и TableView внутри.  Я должен был создать ДВОЙСТВА между представлением вида ViewController и базовым представлением (кроме табличного представления есть больше видов, поэтому я должен был использовать общий контроллер представления). У каждого ViewController есть одно соединение, поэтому это действительно странно. Я предполагаю, что это снова какая-то ошибка iOS.

Ответ 2

Пожалуйста, убедитесь, что вы установили контроллер представления в качестве исходного контроллера представления в своем файле раскадровки. Этот параметр вы найдете в инспекторе атрибутов.

Attributes inspector of main scene in storyboard

UPDATE

Похоже, что вы, возможно, не добавили идентификатор восстановления самому контроллеру навигации, но вместо этого могли установить идентификаторы восстановления на контроллерах дочерних элементов. Если это так, вы должны добавить идентификатор восстановления к отсутствующему контроллеру (контроллерам).

The State Preservation and Restoration Guide

Ответ 3

Добавление

UIViewControllerRestoration

решил это для меня. Если вы нажмете ссылку на протокол, в нем говорится:

// A class must implement this protocol if it is specified as the restoration class of a UIViewController.


@import UIKit;

@interface AppDelegate : UIResponder <UIApplicationDelegate, UIViewControllerRestoration>

@property (strong, nonatomic) UIWindow *window;

@end

В документах написано:

Класс восстановления реализует UIViewControllerRestoration протокол и отвечает за поиск или создание назначенного объект во время восстановления. Ниже приведены советы по использованию каждого из них:

1) Если контроллер просмотра всегда загружается из основного приложения файл раскадровки во время запуска не назначают класс восстановления. Вместо этого пусть ваш делегат приложения найдет объект или воспользуется преимуществами UIKits поддерживает неявное обнаружение восстановленных объектов.

2) Для просмотра контроллеры, которые не загружаются из основного файла раскадровки время запуска, назначьте класс восстановления. Самый простой вариант - сделайте каждый контроллер представления своим собственным классом восстановления.

До сих пор я понял это так. Без протокола UIViewControllerRestoration appDelegate не является классом восстановления (1). Поэтому предупреждение записывается в начале приложения (время восстановления). Делегат приложения не может каким-то образом найти объект, который должен быть назначен файлу маркера. Проблема в appDelegate. Когда делегат приложения становится восстановлением, он пропускает шаг 1) и переходит к шагу 2). Кажется, что appDelegate становится основным restClass для всех других видов. Следующий метод:

+ (UIViewController*) viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents
                                                            coder:(NSCoder *)coder {}

никогда не вызывается в моем приложении и реставрационные работы без воинств или ошибок.

Я хотел бы понять проблему и что происходит. Надеюсь, это поможет вам, и комментарии могут помочь в выяснении проблемы.:)