0

我正在尝试将字符串字典从 JSON 提取映射到符合 KVC 的 NSManagedObject,我可以成功使用setValue: forKey:,但我看不到如何映射类型。

例如,我不应该将日期设置为任何随机字符串:Printing description of myDate: asdfsadf 但是它起作用了。

我查看了https://stackoverflow.com/a/5345023/828859,它提供了一些有用的答案。我可以进入并为每个属性创建验证......但这似乎不是很干燥,因为每次我有一个日期时我都必须验证每个日期并分别设置输出值。

我更愿意在使用之前按类型进行变异,setValue: forKey:但我不知道如何区分属性类型。

我想做的事:

switch([object typeforkey:key]){
   case @"NSDate":
   //...
   value = mutatedDate
   //...
}
[object setValue:value forKey:key];
4

2 回答 2

0

我最终使用另一个字典进行属性类型映射。然后对象映射对象检查要映射的对象是否遵守此特定协议,并在使用之前使用属性类型字典转换每个属性setValue:forKey:

于 2012-07-14T11:13:01.550 回答
0

你可以询问一个对象它被实例化为什么样的类。因此,您可以执行以下操作:

id myObject = [myDictionary objectForKey:key];

if ([myObject isKindOfClass:[NSDate class]]) {
    // Do stuff
}
else if ([myObject isKindOfClass:[NSString class]]) {
    // Do other stuff
}

这是因为对象是包含一个指针的结构,该指针的 ivar 名称isa指向一个类型的对象Class,所以你总是可以询问一个对象它来自什么类型的类。

于 2012-06-18T06:40:37.550 回答