无法识别的选择器发送到实例(SIG_ABRT),将 NSString 添加到 NSArray

发布于 2024-12-05 22:49:06 字数 719 浏览 0 评论 0原文

我在这里脑洞大开。所以我有一个方法可以查看 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 中做些什么吗?谢谢。

I'm brainfarting here. So I have a method that looks through a NSMutableArray that is a property of another class. The objects are NSString. In the debugger I see it says NSCFString for the object I'm trying to add to an array. So I basically do this:

- (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;
}

And I call this function somewhere else by:

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

But for some reason, I get the unrecognized selector sent to instance and it stops on this line. Am I doing something wrong? Any tips to try to troubleshoot the problem? I already checked the self.ParentVC.SelectedOptions and that shows my NSCFString or NSCFStrings I want. Anything I can do in Instruments for this? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无名指的心愿 2024-12-12 22:49:06

将第二行替换为

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

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

Replace the second line with

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

The real type of the object is what you allocate, not what you declare. In the posted code, the array is not mutable.

冷情 2024-12-12 22:49:06

这一行:

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

应该是

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

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

This line:

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

Should be

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

Otherwise you're creating an immutable array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文