2

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

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

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

我将 NSMutableArray 创建为 ViewController 上的属性:

@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 不起作用?

4

2 回答 2

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)。

于 2013-09-15T08:52:50.937 回答
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 中运行良好

于 2013-09-15T08:53:53.953 回答