+ (NSString *)numberMatching: (NSString *)number and: (NSString *)secondNumber
{
NSString *returnNumber;
if ([number isEqualToString:secondNumber]) {
returnNumber = number;
} else {
NSMutableArray *validNumber = [[self validNumbers] copy];
[validNumber removeObject:number];
[validNumber removeObject:secondNumber];
returnNumber = validNumber[0];
}
return returnNumber;
}
如果重要,这里是validNumber的代码:
+ (NSArray *)validNumbers
{
static NSArray *validNumbers = nil;
if (!validNumbers) validNumbers = @[@"one",@"two",@"three"];
return validNumbers;
}
运行时,我收到以下错误:
- [_ NSArrayI removeObject:]:无法识别的选择器发送到实例0x1ed60f00 ...由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:' - [ _NSArrayI removeObject:]: 无法识别的选择器发送到实例0x1ed60f00'
这似乎表明removeObject不是NSMutableArray的有效方法,但它是有效的。
基本上,我想要做的是:如果两个参数匹配,我想返回值。如果它们不匹配,我想返回第三种可能性(与任一参数都不匹配)。
答案 0 :(得分:3)
因为validNumber
是NSArray
。您无法从NSArray
删除(或添加)对象。请改用NSMutableArray
和mutableCopy
:
NSMutableArray *validNumber = [[self validNumbers] mutableCopy];
[validNumber removeObject:number];
[validNumber removeObject:secondNumber];
答案 1 :(得分:0)
当您将copy
消息发送到NSArray
时,您获得的副本也是NSArray
实例,您无法从不可变数组中删除对象。为了获得可变副本,您需要发送mutableCopy
消息:
NSMutableArray *validNumber = [[self validNumbers] mutableCopy];