Objective-C - использование NSCoding и обновление вашего приложения в App Store - PullRequest
2 голосов
/ 31 октября 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

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

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

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

0 голосов
/ 31 октября 2011

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

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

...