我想解析XML以填充符合KVC的对象但是,我的解析器非常愚蠢,它只是从XML属性/标签组装NSStrings并尝试通过KVC设置它们。
这适用于实际的字符串和数字(我相信),但我还需要设置日期。问题显然是解析器不知道字符串代表一个日期,并且它试图使用vanilla KVC调用它 - 之后KVC框架抱怨类型不匹配(在日期字段上设置字符串)。
是否有一种编程方式可以“拦截”调用到KVC框架中,以便我可以更改正在设置的数据(通过NSDateFormatter运行日期字符串)?
我可以在解析器中加入一些智能,但在此之前,还有其他众所周知的解决方案可以解决这类问题吗?
答案 0 :(得分:2)
这可能不是完美的解决方案,但是......我想分享我的想法;)
首先,请看一下:Key-Value Coding - Validation。该文档描述了一种在通过KVC设置变量时验证变量的简洁方法。你可以通过以下方式利用这个优势:
这应该提供一个干净的实现,以确保正确的类型。
干杯, 的Pawel
答案 1 :(得分:0)
使用KVC,一切都经过setValue:forKey:
的默认实现,它们调用适当的mutator方法(as described here)。
您可以覆盖setValue:forKey:
来检查需要转换的一个或多个键,并进行适当的更改。
- (void)setValue:(id)value forKey:(NSString *)key
{
if([key isEqualToString:@"someDate"]) {
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
someDate = [dateFormatter dateFromString:value];
value = somedate;
}
[super setValue:value forKey:key];
}
那是来自内存的,所以无法保证它是否真的可以编译和运行。 ; - )