替换NSMutableArray中的对象

时间:2015-07-05 16:39:55

标签: ios objective-c arrays nsmutablearray

我尝试用字符串替换Array中的对象。我用

@property (strong, nonatomic) NSMutableArray *myArray;

NSString *oldString = [NSString stringWithFormat:@"oldObject"];
NSString *toReplace = [NSString stringWithFormat:@"newObject"];

NSUInteger index = [self.myArray indexOfObject:oldString];
[self.firstLanguageArray replaceObjectAtIndex:index withObject:toReplace];

但每次我尝试更换时,应用程序都会崩溃。

编辑:我记录了"索引"。我将成为2147483647的整数。

1 个答案:

答案 0 :(得分:4)

可能是因为您拨打indexOfObject的电话会回复NSNotFound

NSNotFound是一个常量,它告诉您在oldString字典中找不到self.myArray对象,并且此常量的值为(NSUInteger)-1(这是相当于无符号值2147483647,因为整数下溢),这个值显然会使你的应用程序崩溃,其中" Out of Bounds"异常。

解决方案是在使用之前测试index != NSNotFound是否正确。或者确保您的数组self.myArray实际上包含NSString类型的对象,其值为"oldObject"

如果根据您的实际代码,您希望oldObject中出现self.myArray,那么请再想一想,可能会记录self.myArray的内容以查找它实际包含的内容,以及还要检查此内容是否为字符串 (如果您在记录"oldObject"的内容时看到myArray,那可能只是数组中对象的description字符串,因此数组不会包含字符串"oldObject"本身,但描述为"oldObject"的对象

附注:如果您不使用任何格式占位符(例如stringWithFormat%d等),则无需使用%@。在这种情况下,您应该直接使用字符串常量,如果该字符串是常量,则无需动态构建字符串:只需使用NSString* oldString = @"oldObject"NSString* toReplace = @"newObject"