2010-11-06 35 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; 
    }