我搜索了其他问题,但似乎找不到类似的问题。要么我完全错了,要么我失明了。但这里是代码:
@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 的最后一个值相同。
我做错了什么?
答案 0 :(得分:1)
立即解决方案可能是改变:
[senses addObject:sense];
为:
[senses addObject:[NSString stringWithString:sense]];
这将添加唯一的实例,而不是一遍又一遍地添加相同的可变字符串。
但是看起来你正在使用“。”分割字符串。字符作为分隔符。
有一种更简单的方法:
NSArray *senses = [rl componentsSeparatedByString:@"."];
就是这样 - 一行。
答案 1 :(得分:1)
“sense”始终是同一个对象。它是一个可变字符串,因此内容可以更改,但它始终是相同的对象。因此,感官将多次包含该单个对象。你可以改为使用
[senses addObject:[sense copy]];