如何在NSNumber和NSString对象之间有效转换

时间:2014-08-12 09:01:18

标签: ios objective-c

我有一个NSDictionary对象,其中有数百个关键对象对。所有对象都是NSNumberNSString

检查一下:

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 ..

需要一些指导。

感谢。

2 个答案:

答案 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)];

然后我们可以将属性与解析数据进行比较