我尝试用字符串替换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
的整数。
答案 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"
。