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