2013-03-01 64 views
2

在我的應用程序中插入對象的NSMutableArray的時候,我要插入的對象進入的NSMutableArray:奇怪的結果在指數1

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

我把斷點在第二行代碼,結果在調試區OK:

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

但是運行第二個代碼行後,結果是出人意料:

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的bug?

當在索引> 1處插入對象時,沒有問題。

+0

你在調試區看到這個結果嗎?如果你迭代數組呢? – tkanzakic 2013-03-01 07:35:00

回答

3

我很少相信那個領域出來的結果。改用調試器命令。該數組已正確創建。我複製並粘貼這兩條線和我

(LLDB)PO測試
$ 0 = 0x1dda1ad0 < __NSArrayM 0x1dda1ad0>(
1,
3,

第一行後,

(LLDB)PO測試
$ 1 = 0x1dda1ad0 < __NSArrayM 0x1dda1ad0>(
1,
2,
3,

第二行之後。但是,結果是您在變量窗口中說的方式。故事的寓意是,相信調試器而不是變量窗口!

+0

+1。我試過了,它對我來說也是一樣。 – Rushi 2013-03-01 07:44:56

+0

感謝borrrden,從現在開始,我不信任變量窗口。 我嘗試把NSLog打印出來的結果。 (@「打印出結果:[0] =%@,[1] =%@,[2] =%@,[3] =%@」,[test objectAtIndex:0],[test objectAtIndex :1],[test objectAtIndex:2],[test objectAtIndex:3]); 結果正常: 打印出結果:[0] = 1,[1] = 2,[2] = 3,[3] = 4 – 2013-03-01 08:02:47