У меня какое-то странное поведение в симуляторе 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 рекомендует работать на реальном устройстве и не гарантирует аналогичного поведения на симуляторе. Но есть ли какие-то настройки, которые мне нужно где-то поставить, чтобы восстановление состояния работало в симуляторе? В какой-то момент он у меня работал, и я предположил, что мои изменения в раскадровке нарушили его. Но с таким минимальным приложением мне интересно, есть ли что-то более фундаментальное.