setValuesForKeysWithDictionary可以与嵌套字典一起使用

时间:2010-11-06 23:47:20

标签: objective-c nscoding

所以我有一个NSDictionary,其中一个键是一个字典数组。我正在映射的类具有匹配的键名和setter。可以用setValuesForKeysWithDictionary为我填写子词典吗?当我尝试它时,似乎它用指针垃圾或其他东西填充物体,但我是一个新生儿,所以也许我做错了什么。这个功能是那样的吗?

1 个答案:

答案 0 :(得分:4)

我意识到setValuesForKeysWithDictionary无法知道用什么类型的对象来填充NSMutableArray。我最终为数组属性创建了一个自定义setter,它手动循环传入的数组元素(NSDictionaries)并为每个元素调用setValuesForKeysWithDictionary。

以下是代码:

我想要一个名为itemM的类型为NSMutableArray的属性填充Item类型的对象。 setItemList setter循环遍历mystery对象数组,将每个NSDictionary转换为我的Item类型并将它们添加到新数组中。任何关于如何简化代码的评论都是值得欢迎的。

我还想在这里添加一些逻辑来处理数组已经包含Item对象而不是字典的情况。在actionscript中,您可以在尝试强制转换后查看是否有效,但不确定等效过程是什么。 [item isMemberOfClass [Item class]]始终求值为YES,即使item是NSDictionary也是如此。我不明白为什么......

 - (void) setItemList:(NSMutableArray*)input{
        [itemList autorelease];
        itemList = [[NSMutableArray alloc] initWithCapacity:input.count];

        //loop through the array, creating an Item for for each object in the array
        for(int i=0;i<input.count;i++){


            Item* item = [Item new];
            [item setValuesForKeysWithDictionary:(NSDictionary*)[input objectAtIndex:i]]; 
            [itemList insertObject:item atIndex:i];

        }
    }
    - (NSMutableArray*) itemList{
        return itemList;
    }