首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制使用KVC类型

强制使用KVC类型
EN

Stack Overflow用户
提问于 2011-03-18 04:02:46
回答 2查看 235关注 0票数 1

我想解析XML来填充符合KVC的对象,但是,我的解析器非常愚蠢,它只是从XML属性/标签组装NSStrings,并试图通过KVC设置它们。

这适用于实际的字符串和数字(我相信),但我还需要设置日期。显然,问题是解析器不知道字符串代表日期,它试图使用普通的KVC调用来处理它-之后,KVC框架会报告类型不匹配(在日期字段上设置字符串)。

有没有一种编程方法可以“拦截”对KVC框架的调用,这样我就可以修改正在设置的数据(通过NSDateFormatter运行日期字符串)?

我可以在解析器中添加一些智能,但是在这样做之前,对于这种类型的问题,是否有其他众所周知的解决方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-18 04:43:23

这可能不是完美的解决方案但是..。我想分享我的想法;)

所以,首先,看一下这里:Key-Value Coding - Validation。该文档描述了一种在通过KVC设置变量时对其进行验证的简便方法。您可以通过以下方式利用这一点:

  1. 首先为您的类变量实现KV验证方法
  2. 在您的验证方法中设置您的值
  3. 检查它是否是日期/字符串/任何您想要的类型-并将其更改为正确的类型。

这应该为确保正确的类型提供一个干净的实现。

干杯,Pawel

票数 2
EN

Stack Overflow用户

发布于 2011-03-18 04:39:44

使用KVC,所有东西都要经过一个默认的setValue:forKey:实现,它调用适当的赋值方法(as described here)。

您可以只覆盖setValue:forKey:来检查需要转换的一个或多个键,并进行适当的更改。

代码语言:javascript
复制
- (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];
}

这是从内存中获取的,所以不能保证它是否真的会编译和运行。;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5344554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档