2

私のアプリケーションでは、オブジェクトを NSMutableArray に挿入したいと考えています。

NSMutableArray *test = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4], nil];
[test insertObject:[NSNumber numberWithInt:2] atIndex:1];

コードの 2 行目にブレークポイントを配置すると、デバッグ領域の結果は OK です。

self = (MasterViewController *) 0x074b9cb0
test = (NSMutableArray *)   0x07462c50 @"3 objects"
   [0] = (id)   0x07461f10 (int) 1
   [1] = (id)   0x07473ec0 (int) 3
   [2] = (id)   0x074cbd30 (int) 4

しかし、2 行目のコード行を実行すると、結果は予期しないものになります。

self = (MasterViewController *) 0x074b9cb0
test = (NSMutableArray *)   0x07462c50 @"4 objects"
   [0] = (id)   0x074713f0 (int) 2
   [1] = (id)   0x07473ec0 (int) 3
   [2] = (id)   0x074cbd30 (int) 4
   [3] = (id)   0x07461f10 (int) 1

インデックス 1 に挿入した後、最初のオブジェクト (int 1) が最後のオブジェクトになる理由、またはこのケースは iOS 6.1 のバグである理由を説明できますか?

index > 1 にオブジェクトを挿入する場合、問題はありません。

4

1 に答える 1

3

その分野から出てくる結果を私はめったに信用しません。代わりにデバッガー コマンドを使用してください。アレイは正しく作成されています。これらの2行をコピーして貼り付けたところ、

(lldb) po テスト
$0 = 0x1dda1ad0 <__NSArrayM 0x1dda1ad0>(
1,
3,
4
)

最初の行の後、および

(lldb) po test
$1 = 0x1dda1ad0 <__NSArrayM 0x1dda1ad0>(
1,
2,
3,
4
)

2行目以降。ただし、結果は変数ウィンドウで言うとおりです。この話の教訓は、変数ウィンドウの代わりにデバッガーを信頼することです!

于 2013-03-01T07:42:41.007 に答える