奇怪的问题:将值设置为相应对象的属性

时间:2014-12-09 11:36:08

标签: ios objective-c properties xcode6

这是我将NSDictionary过滤/转换为任何相应类(模型)对象的代码。

我的代码如下

-(NSMutableArray *)filterArray:(NSMutableArray *)arrList WithClass:(Class)class
{
    NSMutableArray *arrFilterArray = [[NSMutableArray alloc] initWithCapacity:arrList.count];
    for(NSMutableDictionary *dicUser in arrList)
    {
        id classObject = [[class alloc] init];

        if([dicUser respondsToSelector:@selector(allKeys)])
        {
            for(NSString *key in dicUser.allKeys)
            {
                @try
                {
                    [classObject setValue:[dicUser valueForKey:key] forKey:key];
                }
                @catch(id anException)
                {
                    NSLog(@"Exception: %@",anException);

                    //do nothing, obviously it wasn't attached because an exception was thrown
                }
            }
            [arrFilterArray addObject:classObject];
        }else
        {
            return arrList;
        }
    }
    return arrFilterArray;
}

此代码适用于xCode 5.1.1和xCode 6.0以上版本,仅当字典的键值为Numeric时返回Exception。

我刚刚得到的另一个奇怪的事情,现在,它在iPhone上运行良好但不适用于iPad ......这真是难以置信......

希望,我会在这里得到解决方案。

1 个答案:

答案 0 :(得分:0)

问题是当你有一个数值时,这一行:

 [classObject setValue:[dicUser valueForKey:key] forKey:key];

尝试将此值:[dicUser valueForKey:key]添加到classObject的属性,其名称是键(数值),并且任何类对象都不能具有名称的属性是数值。

如果你的dict中你可以收到一些数值,你的classObject应该实现这个方法来处理它们:

-(void)setValue:(id)value forUndefinedKey:(NSString *)key
{
if ([key isEqualToString:@"123"])
{
    self.myPropertyFor123 = value;
}
else
{
    // To cacht others mistakes.
    [self valueForKey:key];
}
}