Objective-C — использование NSCOding и обновление вашего приложения в App Store.

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

Поэтому меня беспокоит то, что я делаю некоторые обновления в своем классе, например, добавляю переменную экземпляра. А затем загружает приложение в App Store. Поэтому, когда пользователь обновляет до новой версии, старые объекты, сохраненные в папке «Документы», кодируются без той новой переменной экземпляра, которую я добавил в новой версии. Так что, когда мое приложение попытается декодировать сохраненные объекты во время запуска, оно потерпит неудачу, потому что «старые» объекты из папки «Документы» не были закодированы с этой новой переменной?

Как бы я справился с этой проблемой? Убедиться, что я пишу свои классы «правильно» с самого начала? Я уверен, что в конечном итоге мне понадобится изменить один из моих классов, а затем сломать старые сохраненные объекты на диске.


person Peter Warbo    schedule 30.10.2011    source источник


Ответы (2)


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

Например, если вы сейчас сохраняете свои объекты в коллекции в «myObjectsFile», когда у вас будет новая версия, используйте имя файла «myObjectsFile2». Когда ваше приложение запускается, проверьте «myObjectsFile», если он есть, загрузите свои старые объекты и перенесите их в новую версию объекта, затем сохраните эти перенесенные объекты в «myObjectFile2» и удалите «myObjectFile».

При следующем запуске у вас все готово, так как вы удалили «myObjectsFile».

person NJones    schedule 30.10.2011

Вы можете управлять версиями своих объектов, имея свойство версии, которое, как вы гарантируете, всегда будет там.

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

person Brad The App Guy    schedule 30.10.2011