【发布时间】:2010-10-30 23:30:04
【问题描述】:
Apple 提供了 NSArchiver 和 NSUnachriver 用于对象序列化/反序列化,但这不能处理任何自定义 xml 架构。因此,必须手动使用任何自定义 xml 模式的数据填充对象结构。 由于 iPhone 开发者社区正在迅速发展,许多新手程序员都对处理可用的 xml 解析可能性感到绝望。
iPhone SDK 仅提供 NSXmlParser 用于 xml 解析,这对于读取 xml 文件的某些部分更有用,而不是填充整个对象结构,这真的很痛苦。
另一种可能性是著名的 libxml 库,它是用 ANSI C 编写的 - 对于开始使用 Objective-c 编程并且以前从未学过正确 C 的人来说并不容易使用。事件有很多可用的包装器,处理 xml 对新手来说可能很痛苦。
我的想法在这里发生了。自动填充对象结构的 XmlSerializer 库可以使它更容易,并提高许多程序员的应用程序质量。 我的想法应该是这样的:
xml 文件
<Test name="Michael" uid="28">
<Adress street="AlphaBetaGammastrasse 1" city="Zürich" postCode="8000" />
<Hobbies>
<Hobby describtion="blabla"/>
<Hobby describtion="blupblup"/>
</Hobbies>
</Test>
要填写的课程
@interface Test : NSObject {
NSString *name;
Adress *adress;
NSArray *hobbies;
int uid;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, retain) Adress *adress;
@property (nonatomic, retain) NSArray *hobbies;
@property (nonatomic, readwrite) int uid;
@end
@interface Adress : NSObject {
NSString *street;
NSString *city;
int postCode;
}
@property (nonatomic, copy) NSString *street;
@property (nonatomic, copy) NSString *city;
@property (nonatomic, readwrite) int postCode;
@end
xml 序列化程序应该如何工作
NSError *error = nil;
XMLSerializer *serializer = [[XMLSerializer alloc] init];
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"TestFile" ofType:@"xml"]];
Test *test = [serializer deserializeWithData:data error:&error];
填充对象结构只需要一行代码:
Test *test = [serializer deserializeWithData:data error:&error];
这将非常容易使用,任何新手程序员都可以使用它。对于更高级的用法,可以配置序列化程序。
您认为,这对 iPhone 和 OSX 应用程序来说会是一个有用且受欢迎的库吗?
编辑: 你可以看到项目here,但距离发布还很远。
【问题讨论】:
-
这会有所帮助...code.google.com/p/wonderxml
-
这是我拼凑起来的类似内容:kpmattius.wordpress.com/2011/06/07/objective-c-serialization 如果有人有时间,他们可以让它做得更多,但它对我有用:D
标签: iphone objective-c xml serialization