2011-01-23 4 views
0

別のNSDictionary *辞書(人事部)の中にあるNSDictionaries(各従業員を表す)のグループからオブジェクト(従業員名)の配列を読み込む際に問題があります。各サブディクショナリのキーは従業員IDです。mutableArrayにディクショナリのオブジェクトを代入する

私はまったく間違った方向から来ているかもしれませんが、私は非常に初心者ですが、私が読んだことから、このようなものでなければなりません。私はpName(従業員名)それぞれのサブディクショナリから、すべてそれは一言である。 MutableArray *の名前にpNamesを追加することはできません。

任意のヘルプやガイダンスが大幅にあなたがあなたの名前を入れて配列オブジェクトを作成していないように見えます...

int i, count; 
    id key, value; 

    keys = [dictionary allKeys]; 
    count = [keys count]; 
    for (i = 0; i < count; i++) 
    { 
    key = [keys objectAtIndex: i]; 
    value = [dictionary objectForKey: key]; 
    NSLog (@"value:%@", value); 

    NSString *pName = [value objectForKey:@"personName"]; 
    NSLog (@"pName:%@", pName);// the debugger shows the correct pName with each loop 

    [names addObject:pName];// this is wrong and i don't know why 
    } 
    NSLog (@"names:%@", names);// in the debugger names (null) 
+0

ようこそスタックオーバーフロー。将来は、あなたの質問のコードを適切にフォーマットする時間を取ってください( "{}"エディターコントロールを使用してください)。 –

+0

あなたの質問を、少しばかげたコードサンプルで更新する可能性はありますか? (NSMutableArrayという名前がどのように初期化されているかを示すもの) –

答えて

1

をいただければ幸いです。このようなコードがある必要がある:。

names = [NSMutableArray array]; 

...ループの開始前。空の可変配列が作成されます。

+0

ありがとうございました。このような初心者の問題を解決していただきありがとうございます。 – barneyb

+0

+1ダン。コードサンプルのその部分を省略したと思っていました。 :-) –

3

あなたはまたcollection operatorsを使用してこれを行うことができ、特に@unionOfObjectsオペレータ:

namesは方法によって所有されます。なお
NSMutableArray *names = [[[personnel allValues] 
          valueForKeyPath:@"@unionOfObjects.personName"] 
          mutableCopy]; 

(そのカウントを保持している1)が、暫定アレイ([personnel allValues]と1 valueForKeyPath:によって作成されます)は、オートレリースされ、メソッドによって所有されていません。何らかの理由で

(おそらくvalueForKey:に特別であるため、valueForKeyPath:valueForKey:への呼び出しのシーケンスと同等ではないであろう「@」で始まるキー名ので)、NSDictionaryvalueForKeyPath:メソッドを持っていないので、あなた最初にallValuesを使用して配列に変換する必要があります。または、valueForKeyPath:をカテゴリに実装できます。GnuStep'sまたはcocotron's(実際には@unionOfObjectsをサポートしていませんが、_kvo_operator_unionOfObjects:メソッドを定義することで簡単に拡張できます)。

関連する問題