Сохранение данных приложения рисования, чтобы справиться с перебоями на iPhone? - PullRequest
2 голосов
/ 02 марта 2011

Я делаю приложение для рисования растровых изображений на iPhone. Я хочу поддерживать около пяти слоев 1024x768 (~ 15 МБ данных). Моя проблема в том, что я не знаю, какую стратегию использовать для сохранения документа пользователя, чтобы справиться с прерыванием моего приложения.

В настоящее время мой формат файла документа состоит в том, чтобы сохранить каждый слой в виде файла .png, а затем сохранить короткий текстовый файл, содержащий метаданные слоя. Моя проблема в том, что если приложение прерывается чем-то вроде телефонного звонка, у меня вряд ли будет достаточно времени, чтобы мое приложение могло сохранить все данные на диск, так как сохранение всех файлов .png может занять ~ 10 секунд. Какие варианты у меня есть?

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

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

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

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

IOS4 SDK обеспечивает поддержку для длительных фоновых задач, которые были бы идеальным местом для сохранения ваших слоев.Из документации:

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

В любое время, пока он не приостановлен, приложение может вызвать beginBackgroundTaskWithExpirationHandler: способ запросить у системы дополнительное время для выполнения некоторых длительных задач в фоновом режиме.Если запрос удовлетворен, и если приложение переходит в фоновый режим во время выполнения задачи, система позволяет приложению запускаться в течение дополнительного периода времени вместо его приостановки.(Свойство backgroundTimeRemaining объекта UIApplication содержит количество времени, необходимое приложению для запуска.)

1 голос
/ 02 марта 2011

Я не уверен, возможно ли это (вы не указываете, как пользователь взаимодействует со слоями или действительно ли это взаимодействие прозрачно с их точки зрения), но в качестве предложения почему бы просто не сохранить «активный»слой (через фоновый поток), когда пользователь переключает слои, так как вам нужно будет сохранить только один слой, когда ваше приложение будет фоновым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...