Eny*_*yra 11 xml iphone serialization objective-c
Apple为对象序列化/反序列化提供了NSArchiver和NSUnachriver,但是这不能处理任何自定义xml架构.因此,必须手动填充具有任何自定义xml架构的数据的对象结构.由于iPhone开发者社区正在快速增长,许多新手程序员都在绝望地处理可用的xml解析可能性.
iPhone SDK仅为xml解析提供NSXmlParser,这对于读取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>
Run Code Online (Sandbox Code Playgroud)
要填写的课程
@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
Run Code Online (Sandbox Code Playgroud)
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];
Run Code Online (Sandbox Code Playgroud)
要填充对象结构,只需要一行代码:
Test *test = [serializer deserializeWithData:data error:&error];
Run Code Online (Sandbox Code Playgroud)
这很容易使用,任何新手程序员都可以使用它.对于更高级的用法,可以配置串行器.
您怎么看?这对iPhone和OSX应用程序来说是一个有用且受欢迎的库吗?
编辑:您可以在这里看到该项目,但它远离发布.
这是一个非常好的主意,就实现而言,我将通过将 NSXMLArchiver 和 NSXMLUnarchiver 实现为 NSCoder 的子类来实现。这样,任何符合 NSCoding 协议的类都可以轻松地与 XML 进行序列化。
序列化为 XML 时,性能受到的一个影响是将原始值作为属性,因为您无法保证对象请求数据进行编码的顺序。因此,如果属性是您想要的,那么它在内存缓冲区中将非常巨大。但这将是一个有趣的练习。
至于受欢迎程度如何?我认为不太受欢迎。用例太小了。
| 归档时间: |
|
| 查看次数: |
16078 次 |
| 最近记录: |