Как я могу сохранить массив объектов класса в Plist (Iphone Development) - PullRequest
1 голос
/ 06 октября 2011

У меня есть вопрос, связанный с сохранением массива объектов Class в plist, а затем вернуть его обратно.

Например, у меня есть класс "A" с двумя Nsstring и некоторыми значениями int.

У меня есть массив объектов класса А.

Как мне сохранить этот массив в plist.

Я могу выполнить сохранение простого массива (Array of Strings) в Plist. Нет ошибок.

Но когда я храню этот «Массив объектов», это невозможно сделать.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 06 октября 2011

Сначала преобразуйте NSArray в NSDictionary, как указано здесь .

Затем используйте NSDictionary writeToFile:atomically:, чтобы сохранить его как Plist.

Для этого ваш класс должен соответствовать протоколу NSCoding .

В противном случае вы можете непосредственно записать свой NSArray в plist без преобразования в NSDictionary.Но в любом случае класс должен соответствовать протоколу NSCoding.

1 голос
/ 20 июля 2012

Вы не можете сохранять объекты в Plists. Это никогда не сработает, вы только сможете сохранить внутренние переменные в plist. Если вы хотите сохранить объекты, вам нужно сначала сделать класс совместимым с NSCoding. Это хорошая ссылка, объясняющая это http://samsoff.es/posts/archiving-objective-c-objects-with-nscoding Но в ней не упоминаются объекты внутри объектов, а в основном просто другой уровень. Вы должны убедиться, что любой объект, который находится внутри объекта, который вы сохраняете, также совместим с NSCoding на всем протяжении цепочки. Затем вам нужно использовать NSKeyedArchiver, чтобы сохранить их. Я написал хороший класс менеджера, который позаботится обо всем этом для вас, пока ваши объекты совместимы с NSCoding. его можно получить прямо здесь https://github.com/caranicas/Save-Manager наслаждайтесь!

1 голос
/ 06 октября 2011

Укажите правильный путь .plist к переменной класса.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"patientList.plist"];
[myPatients writeToFile:path atomically:YES];

используйте вышеупомянутое.

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