2013-05-15 2 views
2

Просто начав изучать iOS, и у меня есть действительно основной вопрос: какой правильный способ архивировать/разблокировать целую коллекцию объектов?iOS: правильный способ архивирования/распаковки коллекции объектов

Я понимаю, что вам сначала нужно реализовать протокол NSCoder для класса. Предполагая, что у меня есть класс, который я могу архивировать и разархивировать правильно, я работаю через пример, который выглядит следующим образом:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
NSString *docsDir = [paths objectAtIndex:0]; 
NSString *archivePath = [docsDir stringByAppendingPathComponent:@"thing.model"]; 
Thing *thing = [[Thing alloc] init]; 
[NSKeyedArchiver archiveRootObject:thing toFile:archivePath]; 

Теперь, это просто экономия один Thing как файл thing.model, правильно?

Итак, если у моего приложения много «вещей», и я хочу их архивировать, как вы к этому подошли?

Более конкретно (в случае, если какой-либо контекст помогает), я разрабатываю приложение, поддерживаемое веб-службой, и я хочу иметь возможность создавать/редактировать записи в приложении, сохранять их на диске и периодически синхронизировать объекты, которые я сохранил локально с веб-службой.

Спасибо!

ответ

4

Сортировка классов соответствует NSCoding. Итак, если у вас есть NSArray объектов Thing, просто архивируйте/разрхивируйте массив.

+0

Правильно ли я понимаю, что элементы в массиве также должны соответствовать NSCoder для этого? – Andrew

+0

Вы правы. – rmaddy

+0

Lol, нужно набрать не менее 15 символов, что делает звук «да» очень формальным. Это было очень полезно, спасибо! – Andrew

0

Итак, если у моего приложения много «вещей», и я хочу их архивировать, как вы к этому подошли?

Если вы хотите сохранить каждую из этих вещей по отдельности, используйте -encodeObject:forKey: для добавления объекта (и ключ, который вы будете использовать, чтобы получить его позже) в архив.

Как заметил rmaddy, если все вещи находятся в коллекции, вы можете просто архивировать коллекцию как отдельный объект. Опять же, вы можете сделать это с помощью -encodeObject:forKey:, или если коллекция будет единственной вещью в архиве, вы можете сделать это так, как вы делаете это выше, используя archiveRootObject:toFile:.

 Смежные вопросы

  • Нет связанных вопросов^_^