Предупреждение журналов восстановления состояния iOS вместо запуска в симуляторе

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

Я создал проект с одним экраном в Xcode 5.0.2. В моем делегате приложения я добавил только два метода:

- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
    NSLog(@"I am restore.");
    return YES;
} // */


- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
    NSLog(@"I am save.");
    return YES;
} // */

Других изменений нет.

При отладке на реальном iPhone я получаю оба сообщения журнала; «Я восстанавливаюсь» при запуске и «Я сохраняюсь», когда нажимаю кнопку «Домой», чтобы остановить приложение. Если я закомментирую один или оба, я не получу никаких сообщений в журнале. Кажется, вам нужны оба метода, чтобы они работали. Их даже не вызывают без присутствия другого.

При отладке в симуляторе iOS (я не знаю, как определить, какую версию ОС я использую в симуляторе) я никогда не получаю ни одно из сообщений журнала. Если присутствуют оба метода и только если присутствуют оба, я получаю сообщение «Предупреждение: невозможно создать файл маркера процесса восстановления», отображающийся в моем журнале, но я все еще не получаю сообщения журнала, которые я сделал. Итак, само присутствие обоих вызовет предупреждение, но никакая сила на Земле не позволит их призвать. В симуляторе. Я попытался добавить идентификатор восстановления в раскадровку, но это ничего не изменило.

Я понимаю, что Apple рекомендует работать на реальном устройстве и не гарантирует аналогичного поведения на симуляторе. Но есть ли какие-то настройки, которые мне нужно где-то поставить, чтобы восстановление состояния работало в симуляторе? В какой-то момент он у меня работал, и я предположил, что мои изменения в раскадровке нарушили его. Но с таким минимальным приложением мне интересно, есть ли что-то более фундаментальное.


person Erik Allen    schedule 18.02.2014    source источник


Ответы (2)


Это не ошибка. Эти методы вызываются при подготовке сериализации состояния для вашего приложения. Сериализация состояния никогда не происходит в симуляторе, потому что приложение не будет завершено.

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

Редактировать. Сериализацию состояния можно выполнить в симуляторе, нажав смоделированную клавишу "домой". ⌘⇧Ч

person Holly    schedule 18.02.2014
comment
Это здорово знать. Спасибо. Всех этих неприятностей можно было бы избежать, если бы было более полезное предупреждающее сообщение. Я до сих пор понятия не имею, что такое файл маркера прогресса. - person Erik Allen; 19.02.2014

Часто симулятор начинает вести себя странно, и решение большинства проблем заключается в том, чтобы просто сбросить его.

В симуляторе нажмите «Меню симулятора iOS» > «Остальное содержимое и настройки...»

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

person bauerMusic    schedule 18.02.2014
comment
Обычно это перебор. Одновременный выход из Xcode и симулятора обычно помогает. - person Steven Fisher; 19.02.2014
comment
Я согласен со Стивом. Если перезапуск XCode и симулятора не решает проблему, перезагрузите симулятор. - person bauerMusic; 19.02.2014