【问题标题】:Unrecognized selector sent to instance (SIG_ABRT), adding NSString to NSArray无法识别的选择器发送到实例(SIG_ABRT),将 NSString 添加到 NSArray
【发布时间】:2011-09-22 21:28:27
【问题描述】:

我在这里胡思乱想。所以我有一个方法可以查看另一个类的属性 NSMutableArray。对象是 NSString。在调试器中,我看到它为我要添加到数组的对象显示 NSCFString。所以我基本上是这样做的:

- (NSArray *)GetFileNames {
    NSMutableArray *fileNameArray = [[[NSArray alloc] init] autorelease];
    for (NSString *str in self.ParentVC.SelectedOptions) {
        [fileNameArray addObject:str];
        NSLog(@"%@", str); // this works fine
    }
    return fileNameArray;
}

我在其他地方调用这个函数:

    NSArray *fileNameArray = [[NSArray alloc] initWithArray:[self GetFileNames]];

但由于某种原因,我将无法识别的选择器发送到实例,并且它停止在这一行。难道我做错了什么?尝试解决问题的任何提示?我已经检查了 self.ParentVC.SelectedOptions 并显示了我想要的 NSCFString 或 NSCFStrings。我可以在 Instruments 中为此做些什么?谢谢。

【问题讨论】:

  • 或许应该是“NSMutableArray alloc”?
  • @Alan Moore 谢谢!总脑残!
  • 不客气!我想我应该把它作为答案:P
  • 艾伦·摩尔没有名声。他将不得不安于成为世界著名作家。

标签: iphone nsstring


【解决方案1】:

将第二行替换为

NSMutableArray *fileNameArray = [[[NSMutableArray alloc] init] autorelease];

对象的真正类型是你分配的,而不是你声明的。在发布的代码中,数组是不可变的。

【讨论】:

    【解决方案2】:

    这一行:

    NSMutableArray *fileNameArray = [[[NSArray alloc] init] autorelease];
    

    应该是

    NSMutableArray *fileNameArray = [[[NSMutableArray alloc] init] autorelease];
    

    否则,您将创建一个不可变数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2012-07-24
      相关资源
      最近更新 更多