我有一个使用相对少量数据的iPhone应用程序。 我想以XML格式保存数据,并能够将其加载到Objective-C对象的内存中。我想使用iPhone SDK工具,如 NSPropertyListSerialization 或 writeToFile:atomically:类和方法。
NSPropertyListSerialization documentation说
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对象。
提前致谢, 爱德华
答案 0 :(得分:4)
如果您还没有阅读过,我强烈推荐Archives and Serializations Programming Guide,特别是有关使用NSCoding协议编码和解码对象的部分。
如果使用该协议,您的对象将存储为NSData。但你可以模仿它(即创建自己的协议),以便你的类返回自己的字典表示,并可以从字典表示初始化自己(我认为没有办法自动执行此操作)。但是,结果基本上与您发布的family.plist文件相同。
如果您正在寻找获取这样的XML文件的方法:
<person>
<id>0</id>
<name>Edward</name>
<age>10</age>
</person>
然后plist不是你想要的。
答案 1 :(得分:0)
我很惭愧地说我使用[NSString stringWithformat:]
来制作XML文档。这是迄今为止我发现的最简单的方法。