2012-03-21 7 views
1

Я пишу приложение, в котором пользователь может добавлять и удалять объекты из нескольких списков. Чтобы сохранить свои списки даже в случае сбоя приложения, я хочу записывать их на диск каждый раз, когда они меняются. Мой текущий план состоит в том, чтобы создать класс, который наблюдает за списками и, таким образом, уведомляется каждый раз, когда он изменяется, чтобы архивировать их (списки и все объекты в них следуют протоколу NSCoding).Сохранение списка при каждом изменении

Следует отметить, что я заранее знаю, сколько будет списков, и что эти списки не будут расти до более чем 100 наименований в длину (большинство будет 10-20).

Это лучший способ достичь того, чего я хочу достичь? Если это даже проблема, о которой я беспокоюсь, или допустимо только создавать память этих списков, когда приложение выходит? Я также рассматривал подкласс NSMutableArray, чтобы создать класс, который сохраняет себя всякий раз, когда он изменяется, поэтому ни один класс не должен знать обо всех списках, которые должны быть сохранены.

+2

Возможно, было бы лучше исправить ошибки, чем архивировать списки снова и снова ... запись на диск может быть дорогостоящим –

+0

В частности, я не знаю о каких-либо авариях, о которых я знаю. Я просто пытаюсь объяснить любые случаи внешнего края. Если телефон теряет питание или пользователь закрывает приложение извне (т. Е. Дважды щелкает кнопку, чтобы видеть недавно использованные приложения и закрывает приложение оттуда) и т. Д., Приложение проходит обычные методы очистки? –

+1

В таком случае, возможно, вы должны просто сохранить свои данные в 'applicationWillEnterBackground:', потому что это будет вызываться каждый раз, когда нажата кнопка «Дом» или кнопка блокировки, или пользователь переключается на другое приложение. –

ответ

2

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

Если количество изменений невелико, то я рекомендую создавать объекты «списка», которые имеют -NSMutableArray (а не is-a NSMutableArray). Вы можете просто написать себя на диск в любое время, когда кто-то звонит addItem:, чтобы всегда быть в синхронизации. Если изменения происходят очень быстро, довольно легко построить батуты, которые будут экономить «каждую секунду, если бы произошли изменения, но не чаще, чем раз в секунду». (Если это какая-то проблема, добавьте комментарий, и я отправлю код или блог, это не сложно.)