我想解析XML来填充符合KVC的对象,但是,我的解析器非常愚蠢,它只是从XML属性/标签组装NSStrings,并试图通过KVC设置它们。
这适用于实际的字符串和数字(我相信),但我还需要设置日期。显然,问题是解析器不知道字符串代表日期,它试图使用普通的KVC调用来处理它-之后,KVC框架会报告类型不匹配(在日期字段上设置字符串)。
有没有一种编程方法可以“拦截”对KVC框架的调用,这样我就可以修改正在设置的数据(通过NSDateFormatter运行日期字符串)?
我可以在解析器中添加一些智能,但是在这样做之前,对于这种类型的问题,是否有其他众所周知的解决方案?
发布于 2011-03-18 04:43:23
这可能不是完美的解决方案但是..。我想分享我的想法;)
所以,首先,看一下这里:Key-Value Coding - Validation。该文档描述了一种在通过KVC设置变量时对其进行验证的简便方法。您可以通过以下方式利用这一点:
这应该为确保正确的类型提供一个干净的实现。
干杯,Pawel
发布于 2011-03-18 04:39:44
使用KVC,所有东西都要经过一个默认的setValue:forKey:实现,它调用适当的赋值方法(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];
}这是从内存中获取的,所以不能保证它是否真的会编译和运行。;-)
https://stackoverflow.com/questions/5344554
复制相似问题