2010-11-06 33 views
3

所以我有一个NSDictionary其中一个键是一个字典数组。我映射到的类具有匹配的键名和setter。可以setValuesForKeysWithDictionary为我填充子字典吗?当我尝试它时,它似乎是用指针垃圾填充了对象,但我是一个新手,所以也许我做错了什么。这个功能是否像那样工作?可以setValuesForKeysWithDictionary使用嵌套字典

回答

4

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

下面的代码:

有一个名为类型的NSMutableArray,我想它填补对象类型的物品的itemList中财产。 setItemList setter循环遍历mystery对象数组,将每个NSDictionary转换为我的Item类型并将它们添加到一个新数组中。欢迎任何关于如何简化代码的意见。

我也想在这里添加一些逻辑来处理数组已经包含Item对象而不是字典的情况。在actionscript中,您可以在尝试投射某些东西以查看它是否工作后检查null,但不确定相应的过程在此处。 [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; 
    }