我使用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/