的NSMutableArray replaceObjectAtIndex崩溃
我使用的xcode 9的NSMutableArray replaceObjectAtIndex崩溃
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
它把所述值并覆盖现有的索引。
但是,此代码会导致崩溃。
我做错了什么?
您已定义为不可变对象,语法将分配NSArray引用而不是NSMutableArray。你不能更新NSArray。
尝试这样,
NSMutableArray *Upcase_Keys = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"]];
的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,它应该给你这样的警告:
不兼容的指针类型与类型
'NSArray *'
这一切之前说的协合的 表达初始化'NSMutableArray *'
。 `有时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];
最后,建议使用驼峰: 避免命名你的变种以大写。对第一个字母使用小写字母。我想说,在_
问题较少之后,我们倾向于在iOS中编写代码。
Upcase_Keys
=>upcase_Keys
=>upcaseKeys
哦;谢谢xD –
感谢您指出的问题。 :D –