#iphone #objective-c
#iPhone #objective-c
Вопрос:
Я работаю над игровым приложением для iphone. Я не хочу использовать core data или nsuserdefaults для хранения пользовательских данных. вместо этого я хочу сохранить все действия в памяти, а затем отправить их на сервер, когда пользователь вернется к предыдущему экрану, завершит игру или нажмет кнопку «Домой» на iphone. Теперь все работает нормально, но я не могу синхронизировать пользовательские данные, когда пользователь нажимает кнопку «Домой». Я внедрил метод appilcationWillTerminate в своем классе делегатов, но у меня это не работает, поскольку метод не вызывается, когда я нажимаю кнопку home на iphone. Может кто-нибудь, пожалуйста, скажите мне, как выполнить эту задачу?
с наилучшими пожеланиями
Комментарии:
1. Вы пробовали applicationDidEnterBackground:?
Ответ №1:
Как насчет этого метода:
Сообщает делегату, что приложение теперь находится в фоновом режиме.
- (void)applicationDidEnterBackground:(UIApplication *)application
Из документов Apple:
В iOS 4.0 и более поздних версиях этот метод вызывается вместо метода applicationWillTerminate:, когда пользователь завершает работу приложения, поддерживающего фоновое выполнение. Вы должны использовать этот метод для освобождения общих ресурсов, сохранения пользовательских данных, аннулирования таймеров и сохранения достаточной информации о состоянии приложения, чтобы восстановить ваше приложение в его текущем состоянии в случае его последующего завершения. Вам также следует отключить обновления пользовательского интерфейса вашего приложения и избегать использования некоторых типов общих системных ресурсов (например, базы данных контактов пользователя). Также крайне важно избегать использования OpenGL ES в фоновом режиме.
Ваша реализация этого метода имеет примерно пять секунд для выполнения любых задач и возврата. Если вам нужно дополнительное время для выполнения каких-либо конечных задач, вы можете запросить дополнительное время выполнения у системы, вызвав beginBackgroundTaskWithExpirationHandler: . На практике вы должны вернуться из applicationDidEnterBackground: как можно быстрее. Если метод не возвращается до истечения времени, ваше приложение завершается и удаляется из памяти.
Ответ №2:
Вы должны использовать NSUserDefaults для хранения данных о состоянии приложения. Затем, когда приложение запускается повторно, вы можете загрузить данные из NSUserDefaults, чтобы воссоздать предыдущее состояние. Однако с новой многозадачностью это не так необходимо, как это было пару лет назад.