Сериализация объектов в формате XML с использованием Obj-C / iPhone SDK - PullRequest
1 голос
/ 20 июля 2010

У меня есть приложение для 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).

Заранее спасибо, Эдуардо

Ответы [ 2 ]

4 голосов
/ 20 июля 2010

Если вы еще не прочитали его, я настоятельно рекомендую Руководство по программированию архивов и сериализаций , особенно части о кодировании и декодировании объектов с использованием протокола NSCoding.

Если выиспользуйте этот протокол, ваши объекты будут храниться как NSData.Но вы можете имитировать его (то есть создать свой собственный протокол), чтобы ваши классы возвращали словарные представления самих себя и могли инициализировать себя из словарного представления (я не думаю, что есть способ сделать это автоматически).Однако результат по сути будет таким же, как и файл family.plist, который вы опубликовали.

Если вы ищете способ получить файл XML, подобный этому:

<person>
    <id>0</id>
    <name>Edward</name>
    <age>10</age>
</person>

thenplist не то, что вы хотите.

0 голосов
/ 20 июля 2010

Мне стыдно сказать, что я использую [NSString stringWithformat:] для создания XML-документов.Это самый простой способ, который я нашел до сих пор.

...