0
+ (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 的有效方法,但它是有效的。

本质上,我想做的是:如果两个参数匹配,我想返回值。如果它们不匹配,我想返回第三种可能性(不匹配任何一个参数)。

4

2 回答 2

3

因为validNumber是一个NSArray。您不能从NSArray. 使用NSMutableArrayandmutableCopy代替:

NSMutableArray *validNumber = [[self validNumbers] mutableCopy];
[validNumber removeObject:number];
[validNumber removeObject:secondNumber];
于 2013-03-17T17:54:10.907 回答
0

当您将copy消息发送到NSArray时,您获得的副本也是一个NSArray实例,您无法从不可变数组中删除对象。为了获得可变副本,您需要发送mutableCopy消息:

NSMutableArray *validNumber = [[self validNumbers] mutableCopy];
于 2013-03-17T18:00:44.957 回答