したがって、キーの1つが辞書の配列であるNSDictionaryがあります。私がマッピングしているクラスには、一致するキー名とセッターがあります。setValuesForKeysWithDictionary でサブ辞書を埋めることはできますか? 試してみると、オブジェクトがポインタジャンクか何かでいっぱいになっているように見えましたが、私は初心者なので、何か間違っているのかもしれません。その機能はそのように機能しますか?
1 に答える
setValuesForKeysWithDictionary が NSMutableArray を埋めるオブジェクトの種類を知る方法がないことに気付きました。最終的に、配列プロパティのカスタム セッターを作成しました。これは、渡した配列 (NSDictionaries の) の要素を手動でループし、それぞれに対して setValuesForKeysWithDictionary を呼び出します。
コードは次のとおりです。
NSMutableArray 型の itemList というプロパティがあり、Item 型のオブジェクトを埋めたいと思っています。setItemList セッターはミステリー オブジェクトの配列をループ処理し、各 NSDictionary を Item タイプに変換して新しい配列に追加します。コードを簡素化する方法についてのコメントは大歓迎です。
また、配列に辞書ではなく Item オブジェクトが既に含まれている状況を処理するために、ここにいくつかのロジックを追加したいと考えています。actionscript では、何かをキャストしようとした後に null をチェックして、それが機能するかどうかを確認できますが、ここで同等のプロセスが何であるかはわかりません。[item isMemberOfClass [Item class]]
item が NSDictionary であっても、常に YES と評価されます。理由がわかりません...
- (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;
}