У меня есть приложение для iPhone, которое использует относительно небольшой объем данных.
Я хотел бы сохранить данные в формате XML и иметь возможность загружать их в память для объектов Objective-C. Я хотел бы использовать средства iPhone SDK, такие как NSPropertyListSerialization или writeToFile: атомно: классы и методы.
В документации NSPropertyListSerialization сказано, что
Класс NSPropertyListSerialization
предоставляет методы, которые преобразуют свойство
перечислить объекты в и из нескольких
сериализованные форматы. Список недвижимости
объекты включают в себя NSData, NSString,
NSArray, NSDictionary, NSDate и
NSNumber объектов.
Предположим, я хотел бы сохранить пару Person объектов (семейство), все атрибуты которых типы списков свойств . Единственный способ сохранить это в XML-формате - это:
// container for person objects
NSMutableArray *family = [[NSMutableArray alloc] init];
for (int i = 0; i < numberOfPeople; i++) {
// simulate person's attributes
NSArray *keys = [[NSArray alloc] initWithObjects:
@"id",
@"name",
@"age",
Nil];
NSArray *values = [[NSArray alloc] initWithObjects:
[NSNumber numberWithInt:i],
@"Edward",
[NSNumber numberWithInt:10],
Nil];
// create a Person (a dictionary)
NSDictionary *person = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
[family addObject:person];
[person release];
}
// save the "person" object to the property list
[family writeToFile:@"<path>/family.plist" atomically:YES];
[family release];
, который будет генерировать файл family.plist .
Обратите внимание, однако, что мой Person объект на самом деле является объектом NSDictionary (который я не думаю, что подклассы были бы хорошей идеей) с атрибутами в качестве ключей.
Есть ли способ создать класс Objective-C, как это:
@interface Person : NSObject {
NSString *_id;
NSString *_name;
NSNumber *_age;
}
@end
и сериализовать его в файл plist / XML? (Мне нужно сохранить объект в текстовом формате (не двоичном), чтобы я мог редактировать такие данные в текстовом редакторе и разрешать моему приложению загружать их во время выполнения, обычно преобразуя в объекты Objective-C).
Заранее спасибо,
Эдуардо