使用addObject向NSMutableArray添加字符串的问题

时间:2014-01-30 23:46:12

标签: objective-c nsmutablearray osx-mavericks nsmutablestring

我搜索了其他问题,但似乎找不到类似的问题。要么我完全错了,要么我失明了。但这里是代码:

@autoreleasepool {

    NSMutableString *sense = [[NSMutableString alloc] init];
    NSMutableArray *senses = [[NSMutableArray alloc] init];

.......初始化rL和计数/长度的其他代码.......

    for (index=0;index<count;index++) {
        for (j=0;j<length;j++) {
            c = [rL characterAtIndex:j];
            switch (c) {
                case '.':
                    [senses addObject:sense];
                    [sense setString:@""];
                    break;
                default:
                    [sense appendFormat:@"%c",c];
                    break;
            }
        }
    }
}

当我这样做,并在调试模式下进行迭代时,我发现感知中的所有对象都与 sense 的最后一个值相同。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

立即解决方案可能是改变:

[senses addObject:sense];

为:

[senses addObject:[NSString stringWithString:sense]];

这将添加唯一的实例,而不是一遍又一遍地添加相同的可变字符串。

但是看起来你正在使用“。”分割字符串。字符作为分隔符。

有一种更简单的方法:

NSArray *senses = [rl componentsSeparatedByString:@"."];

就是这样 - 一行。

答案 1 :(得分:1)

“sense”始终是同一个对象。它是一个可变字符串,因此内容可以更改,但它始终是相同的对象。因此,感官将多次包含该单个对象。你可以改为使用

[senses addObject:[sense copy]];