Objective c iOS KVC干突变

Objective c iOS KVC干突变,objective-c,ios,mutation,kvc,Objective C,Ios,Mutation,Kvc,我试图将字符串字典从JSON获取映射到符合KVC的NSManagedObject,我可以成功地使用setValue:forKey:,但我看不到如何映射类型 例如,我不能将日期设置为任何随机字符串:打印myDate的说明: asdfsadf 然而,它起了作用 我看了一下,它提供了一些有用的答案。我可以进去为每个属性创建验证。。。但这似乎不是很枯燥,因为我必须验证每个日期,并在每次有日期时分别设置值 在使用setValue:forKey:之前,我更喜欢按类型进行变异,但我不知道如何区分属性类型 我想

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

例如,我不能将日期设置为任何随机字符串:
打印myDate的说明:
asdfsadf
然而,它起了作用

我看了一下,它提供了一些有用的答案。我可以进去为每个属性创建验证。。。但这似乎不是很枯燥,因为我必须验证每个日期,并在每次有日期时分别设置值

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

我想做的是:

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

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

id myObject = [myDictionary objectForKey:key];

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

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

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

True之前使用属性类型字典转换每个属性,但是我的问题不清楚,字典来自JSON响应,所以它是字符串字典。啊,我明白了。我认为没有一个干净的方法来做你想做的事。您需要提前知道键是什么以及它们的类型,并在此基础上切换对象类型,或者需要进行一系列的字符串扫描,以确定您正在使用什么,然后进行验证。