我有一个NSDictionary
对象,其中有数百个关键对象对。所有对象都是NSNumber
或NSString
。
检查一下:
NSDictionary *dic =
{
@"item1" : a NSNumber object,
@"item2" : a NSString object,
@"item3" : a NSString object,
....
}
我希望将此NSDictionary
转换为具有相同键的模型类,但将类型指定为:
@interface ClassA
@property (strong, nonatomic) NSString *item1;
@property (strong, nonatomic) NSNumber *item2;
@property (strong, nonatomic) NSString *item3;
....
有没有有效的方法呢?我尝试过键值编码......
ClassA *class = [Class new];
[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
[class setValue:obj forKey:key];
}
但是发生了什么是item1仍然是NSNumber,而item2仍然是NSString ..
需要一些指导。
感谢。
答案 0 :(得分:0)
我希望这会有所帮助:
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
NSString *Key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1)
withString:[[key substringToIndex:1] capitalizedString]];
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"[self set%@ = %@]",Key, object]);
[class performSelector:selector];
}];
答案 1 :(得分:0)
从服务器解析数据并将其导入app Model时,引发了这个问题。数据有时只是不正确,我将无法立即纠正源。所以我希望有一种比较解析对象和模型属性类型的方法。如果它们不匹配,模型将自动将解析的对象转换为正确的类型。
要获取模型类属性类型,我们可以使用
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(klass, &outCount);
对于属性中的每个属性,我们可以获取其名称和类型
NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)];
NSString *propertyType = [NSString stringWithUTF8String:getPropertyType(property)];
然后我们可以将属性与解析数据进行比较