2012-01-12 5 views
2

У меня возникла странная проблема. Мое приложение iPhone защищено паролем, и только после ввода правильного пароля пользователь может снова войти в систему. Также приложение имеет несколько экранов.Поведение приложения при перезапуске устройства iOS (с запуском приложения)

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

Не будет ли приложение потерять все данные в памяти при перезапуске устройства? Разве мнения не будут снова нарисованы? Как именно приложение ведет себя в этом случае.

EDIT: Я сделал то, что предложил TriPhoenix. Я заметил, что если вы включите устройство и запустите приложение очень скоро, метод делегирования applicationDidBecomeActive не будет вызван. Однако, если вы дадите ему некоторое время перед запуском, все работает так, как ожидалось. Разве метод appDidBecomeActive не должен вызываться при каждом запуске приложения?

Что я тестирую на: ОС: IOS 5.0.1 Xcode: 4.2.1 устройства: iPhone 4s

+0

Вы уверены, что вы выключаете устройство, а не просто выключаете экран? Это звучит безумно, если вы видите, что после правильной перезагрузки устройства. – mattjgalloway

+1

Да, я выключаю устройство («Сдвиньте его на выключение»), и да, это определенно безумно! :( – Vin

+0

Вы пробовали «жесткий» сброс (удерживая обе кнопки до перезагрузки)? – dtuckernet

ответ

2

Возможно ли, что ваше приложение очень мало с точки зрения использования памяти? Я помню разговор WWDC (не могу найти подходящего сейчас, к сожалению,), где сообщается, что очень маленькие приложения с точки зрения использования памяти (ограничение не определено публично, но я думаю, что это было около 16 использования памяти MiB) не были убиты низкой памяти, а скорее приостановлено для флэш-памяти телефона, которое будет пробуждено позже. Я не уверен, что это предназначено для полного завершения работы, но это будет одна из немногих возможностей. Чтобы проверить это, вы можете попытаться искусственно увеличить использование памяти, создав несколько больших объектов/массивов и посмотреть, исчезнет ли проблема.

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

+0

Мое приложение на самом деле довольно громоздко (более 30 МБ IPA). Проблема с методами делегирования приложений заключается в том, что я не могу установить на них контрольную точку и проверить ее, поскольку устройство закрывается. – Vin

+1

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

+0

см. мой обновленный вопрос. – Vin

Смежные вопросы