NSMutableArray在index = 0处的insertObject,创建空指针

时间:2013-09-15 08:46:00

标签: ios objective-c ios6

我有一个NSMutable数组,我存储了一些初始数字。我想要做的是能够查看数字,在某些情况下,删除该项目并将其替换为两个。

我的插入/替换代码似乎在索引>时起作用但是,当我尝试insertObject AtIndex:0时,它不会在0处插入任何内容,而是在数组的末尾放置一个空对象。

要显示插入问题,我可以创建一个空的iOS应用程序。

我在ViewController上创建NSMutableArray作为属性:

@property (strong) NSMutableArray *testArray;

然后在实施中:

self.testArray = [[NSMutableArray alloc] init];

[self.testArray addObject: [NSNumber numberWithInteger:1]];
[self.testArray addObject: [NSNumber numberWithInteger:2]];

[self.testArray insertObject:[NSNumber numberWithInteger:3] atIndex:0];

如果我在插入后放置一个断点,调试器会显示:     [0] =(id)0x07123180(int)1     [1] =(id)0x07614210(int)2     [2] =(id)0x00000000

我期待在地点0看到(int)3。

如果我设置atIndex:1,我得到这个:     [0] =(id)0x07123180(int)1     [1] =(id)0x07131fb0(int)3     [2] =(id)0x07614210(int)2

哪个是正确的。

为什么index = 0不起作用?

2 个答案:

答案 0 :(得分:3)

适合我:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSMutableArray *testArray = [[NSMutableArray alloc] init];

        [testArray addObject: [NSNumber numberWithInteger:1]];
        [testArray addObject: [NSNumber numberWithInteger:2]];
        [testArray insertObject:[NSNumber numberWithInteger:3] atIndex:0];

        for (NSNumber *num in testArray)
            NSLog(@"%@", num);

    }
    return 0;
}

2013-09-15 09:51:18.266 ArrayTest[890:303] 3
2013-09-15 09:51:18.269 ArrayTest[890:303] 1
2013-09-15 09:51:18.269 ArrayTest[890:303] 2
Program ended with exit code: 0

如果我打破for语句并使用lldb:

(lldb) po testArray
<__NSArrayM 0x100109120>(
3,
1,
2
)

(这是在Mavericks DP 7下使用Xcode 5 DP 6)。

答案 1 :(得分:0)

为我工作

 testArray = [[NSMutableArray alloc]init];

 [testArray addObject:[NSNumber numberWithInt:1]];
 [testArray addObject:[NSNumber numberWithInt:2]];

 [testArray insertObject:[NSNumber numberWithInt:0] atIndex:0];

 NSLog(@"%@",testArray);

日志

2013-09-15 10:53:39.048 JsonExample [79141:a0b](     0,     1,     2 )

我也复制了你的示例代码,它在Xcode 4中运行良好