8

私は2つの配列を持っています、つまり

NMutableArray* first;
NMutableArray* second;

今、私は最初のオブジェクトを2番目の配列にコピーしています

for (int i=0;i<first.count; i++)
{
 [second addObject:[first objectAtIndex:i];
}

これで結構です。最初の配列の値にアクセスする方法がわかりません。私はこのようにしてみました、

[second addObject:[[first objectAtIndex:i]name]];

最初の配列の最初のオブジェクトにある名前の値を取得したい。上記の行を使用してみましたが、警告が表示されています。私を助けてください

4

3 に答える 3

7

次のような配列から始めたとします。

NSArray *array1 = @[@{@name : @"Fred"},
                    @{@name : @"Bill"}];

次のように、最初の配列の各要素の特定のプロパティの値を含む 2 番目の配列を作成できます。

NSArray *array2 = [array1 valueForKey:@"name"];

その後、2 番目のアレイをログに記録すると...

NSLog(@"%@", array2);

...結果の出力は次のようになります

2012-04-18 16:26:11.226 ExampleRunner[23320:707] (
    Fred,
    Bill
)

編集

これは、最初の配列のオブジェクトが上記の例に示すように のインスタンスであるか、プロパティまたはインスタンス変数 (またはインスタンス変数)NSDictionaryを持つクラスのインスタンスであるかに関係なく機能することに注意してください。これが機能する方法と理由の詳細については、非公式プロトコルのドキュメントを参照してください。name_nameNSKeyValueCoding

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html

于 2012-04-18T20:29:44.853 に答える
3

ブラケットは現在間違った場所にあります:

[second addObject:[[first objectAtIndex:i] name]];
于 2012-04-18T18:54:05.057 に答える
1

更新された回答:

繰り返しますが、解析しやすいコード行に分割する必要があると思います。

for (id theObject in first)
{
    // without an actual type, I still think the compiler might
    // throw a warning on this next line of code; 
    // but maybe RJR III is correct and it won't warn. 
    // I didn't check.
    NSString * nameOfObject = [theObject name];
    if(nameOfObject)
    {
        [second addObject:nameOfObject];
    }
}

ここでもいくつかのエラー チェックを行っていることに注意してください (つまり、名前が nil でないことを確認します)。

元の回答:

" " への呼び出しからどの種類のカスタム オブジェクトがフェッチされているかをコンパイラが認識できないため、警告が表示されます[first objectAtIndex: i]。つまり、" " を取得しようとしているオブジェクトの種類がわかりませんname

正しい型にキャストすると、警告がなくなります。

または、一度に複数の処理が行われる 1 行を 2 行または 3 行のコードに分割し、その過程でコードを読みやすくします。

于 2012-04-18T18:53:19.897 に答える