我使用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的特定数据
它会转换值并覆盖现有索引。
但是,此代码会导致崩溃。
我做错了什么?
答案 0 :(得分:1)
NSMutableArray replaceObjectAtIndex Crash
所以控制台应该有错误。当发生崩溃时,控制台将帮助您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,它应该给你这个警告:
使用a初始化
的表达式'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
答案 1 :(得分:0)
您已定义为不可变对象,语法将指定NSArray引用而不是NSMutableArray。您无法更新NSArray。
试试这个,
NSMutableArray *Upcase_Keys = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3",@"4,"@"5",@"6",@"7",@"8",@"9",@"0"]];