2

ここで基本的な目的の c の例を使用して、配列に replaceObjectAtIndex を使用しようとしましたが、機能していないようです。

私のコード:

 NSMutableArray *myArray=[NSMutableArray array];
    [myArray addObject:@"First string"];
    [myArray addObject:@"Second string"];
    [myArray addObject:@"Third string"];

    NSString *newElement=[myArray objectAtIndex:1];
    NSLog(@"New object at index 1 BEFORE is %@", newElement);
    [myArray replaceObjectAtIndex:1 withObject:@"Hello"];
    NSLog(@"New object at index 1 AFTER is %@", newElement);

理論的には、newElement の出力には "Hello" が表示されるはずですが、まだ "Second String" が表示されています。

出力:

2012-05-30 11:21:16.638 cocoa lab[753:403] New object at index 1 BEFORE is Second string
2012-05-30 11:21:16.641 cocoa lab[753:403] New object at index 1 AFTER is Second string

お知らせ下さい

ありがとうございました

4

2 に答える 2

5

配列を置き換えた後、配列から新しい値を取得する必要があります

// ...
[myArray replaceObjectAtIndex:1 withObject:@"Hello"];

/* ADD THIS */
newElement=[myArray objectAtIndex:1];

NSLog(@"New object at index 1 AFTER is %@", newElement);

元の文字列を取得した時点で、配列のオブジェクトを置き換え、元の文字列を再度出力します。

于 2012-05-30T15:26:25.407 に答える
0

newElementを呼び出した後に の値をリセットする必要があるreplaceObjectAtIndex:ため、2 回目に値をログに記録する前に別の行を追加します。

newElement=[myArray objectAtIndex:1];

更新 1

気分を害する必要はありません。:-)

更新 2

ちなみに、一般的にこの種の問題を回避する良い方法は、この種の状況で個別のローカル変数を使用する習慣を身に付けることです。たとえば、投稿したコードを次のように書き直すことができます。

NSString *initialValue = [myArray objectAtIndex:1];
NSLog(@"New object at index 1 BEFORE is %@", initialValue);

[myArray replaceObjectAtIndex:1 withObject:@"Hello"];

NSString *newValue = [myArray objectAtIndex:1];
NSLog(@"New object at index 1 AFTER is %@", newValue);
于 2012-05-30T15:26:52.083 に答える