2013-03-01 78 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