我不知道任何特定的实现,但键值编码让你非常接近你想要的:Key Value Coding Guide。我已将streamed json parsing与KVC结合起来,取得了不错的成绩。
-setValue:forKey:方法使序列化数据适应自定义对象非常简单。要继续你的例子,你需要创建一个具有所有必需的访问器方法的Unicorn类:-setName:/ - name,-setManeColor/-maneColor等等(你可以使用某些期望值的属性,但有与maneColor值一样,您可能希望编写自定义setter以从颜色名称字符串转换为NSColor或UIColor对象。)
您还需要将另外两个方法添加到自定义对象:-setValue:forUndefinedKey:和-valueForUndefinedKey :.如果你的对象没有匹配传递给KVC方法的键的访问器方法,那么这些方法将被调用。您可以在这里捕获意外或不支持的值,并根据需要存储或忽略它们。
当您将-setValue:forKey:发送给Unicorn对象时,框架将查找与键模式匹配的访问器。例如,如果键是“maneColor”,并且您正在设置该值,那么框架将检查您的对象是否实现了-setManeColor :.如果是这样,它调用该方法,传入值;否则,调用-setValue:forUndefinedKey:,如果对象没有实现它,则抛出异常。
当解析器的委托收到解析json独角兽对象的通知已经开始时,实例化一个Unicorn对象。当你的解析器返回的分析数据给你,用-setValue:forKey:将数据添加到您的对象:
- (void)parserDidBeginParsingDictionary: (SomeParser *)p
{
self.currentUnicorn = [ Unicorn unicorn ];
}
- (void)parser: (SomeParser *)p didParseString: (NSString *)string
forKey: (NSString *)key
{
[ self.currentUnicorn setValue: string forKey: key ]
}
- (void)parserDidFinishParsingDictionary: (SomeParser *)p
{
[ self.unicorns addObject: self.currentUnicorn ];
}
+1独角兽 – psy 2012-05-04 16:32:21