我使用xcode 9

NSMutableArray *Upcase_Keys = @[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"];
NSString *str = [Upcase_Keys objectAtIndex:0];
str = @"test";
[Upcase_Keys replaceObjectAtIndex:0 withObject:str];

获取NSMutableArray的特定数据

它转换值并覆盖现有索引。

但是,此代码会导致崩溃。

我做错什么了?

最佳答案

NSMutableArray replaceObjectAtIndex崩溃

因此,控制台中应该有一个错误。如果发生崩溃,控制台将为您提供99%的帮助,请仔细阅读!
它应该类似于-[NSArrayI replaceObjectAtIndex:withObject:] unrecognized selector sent to instance。那是您错误的重要部分。 NSArrayI的意思是NSImmutableArray(换句话说,NSArray),而不是NSMutableArray,它指出问题与Upcase_Keys的创建有关。

那为什么?因为@[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"];NSArray的简写语法,而不是NSMutableArray。因此,即使将其声明为NSMutableArray,该对象实际上也是NSArray
实际上,如果您听XCode,它应该给您以下警告:

不兼容的指针类型使用初始化'NSMutableArray *' 'NSArray *'类型的表达式

与前面所说的一切一致。`有时XCode可能是错误的,但请尝试听一下。

有几种可能的调用:

NSMutableArray *Upcase_Keys = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"]];
NSMutableArray *Upcase_Keys = [[NSMutableArray alloc] initWithArray:@[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"]];
NSMutableArray *Upcase_Keys = [@[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"] mutableCopy];

最后,推荐使用camelcase:
避免将您的var命名为大写。首字母使用小写字母。我想说的是_之后的问题较少,但我们倾向于在iOS中编写。
Upcase_Keys => upcase_Keys => upcaseKeys

关于ios - NSMutableArray replaceObjectAtIndex崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46661010/

10-14 20:00