OSX: Как хранить объекты в plist-файле OO-способом - PullRequest
1 голос
/ 28 ноября 2009

Я чувствую себя немного ошеломленным. Я знаю, как хранить любые данные «поддержки списков» в файле настроек, таких как NSArray, NSDictionary, NSString и их аналоги CF. Там нет проблем.

Теперь мне нравится хранить значения моего пользовательского объекта таким образом. Я думал, что если я реализую какой-то протокол сериализации / архивирования, я могу заставить NSUserDefaults понимать мой класс так же, как он понимает NSDictionary.

Например, реализация протокола NSCoding должна дать коду NSUserDefaults все, что ему нужно: я даю ему имена ключей вместе со значениями как plist-совместимые типы (NSString, в основном в моем случае). Но мой кодировщик даже не вызывается. (

Тогда я подумал, что должна быть хотя бы какая-то функция, которая генерирует NSDictionary из протокола NSCoding, чтобы я мог затем отправить этот dict для сохранения в prefs. В идеале, что-то вроде NSKeyedArchiver я передаю любому объекту, совместимому с NSCoding, и он дает мне NSDictionary, и наоборот. Но это не похоже на существование в рамках Apple.

Должен ли я сам написать это? Я ожидаю, что это будет довольно распространенная потребность.

Примечание: я понимаю, что NSKeyedArchiver генерирует двоичный список, который я мог бы записать в виде файла списка. Но это не то, что я хочу. Я хочу добавить содержимое этого объекта в plist-файл prefs моего приложения, т. Е. Я хочу сохранить как данные моего объекта, так и другие данные prefs в plist-файле. Это то, что не представляется возможным с данными функциями.

1 Ответ

0 голосов
/ 29 ноября 2009

В настоящее время я просто добавляю объекты в NSDictionary, затем вызываю NSDictionary «writeToFile: atomically:». В основном я добавляю строки и изображение в виде NSData, но я верю, что все, что я добавлю в NSDictionary, реализующий протокол NSCoding, должно быть записано в файл.

Затем, когда я вызываю initWithContentsOfFile из NSDictionary, все возвращается в словарь, как и раньше. Будет ли это работать для вас - позволить словару позаботиться о сериализации?

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