Objective-C将字符串对象添加到数组中

8

我已经在网上和stackoverflow上到处搜索,但仍然不能弄清楚我的错误在哪里。

我正在尝试向现有的NSMutableArray中添加一个元素。但是它在第4行崩溃:

-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x897b320

代码:

NSMutableArray *mystr = [[NSMutableArray alloc] init];

mystr = [NSArray arrayWithObjects:@"hello",@"world",@"etc",nil];

NSString *obj = @"hiagain";

[mystr addObject:obj];

我做错了什么?这让我疯狂!!!

2
为什么会有人踩这个问题?在我看来这是一个合理的问题,只是因为有人不知道 NS API,并不意味着这是个糟糕的问题。 - gheese
1
@gheese 我也不明白。这是一个清晰的问题。它提供了具体的代码和具体的错误信息。没有理由就给它点踩是不应该被允许的。这对任何人都没有帮助。我认为只是一些脾气暴躁的人认为他们知道这些东西,所以他们应该对那些在他们看来是愚蠢的问题进行点踩。 - rmaddy
我不是其中一个点赞者,但我会建议下投票的原因是:1.似乎没有努力查找错误消息(未识别选择器)。2.如果已经查找了错误消息,它应该会导致相信NSArray不会响应该选择器。这将导致3.查找NSArray文档,以揭示它没有这样的选择器。 - Nick Bull
1
@Nick Bull - 我同意,但必须记住对于新手来说,“未识别的选择器发送到实例0x897b320”没有任何意义。此外,我怀疑这里发布的50%的问题不符合您所述的所有标准。 - gheese
5个回答

14

你的数组不可变!请使用NSMutableArray

mystr = [NSMutableArray arrayWithObjects:@"hello",@"world",@"etc",nil];

由于 NSArray 不包含 addObject 方法,因此您会收到 未识别的选择器 错误。


@Imme22009 如果你这样做,你就不需要在第一行调用 [[NSMutableArray alloc] init] - rmaddy

3
您的代码应该是:

您的代码应该是:

NSMutableArray *mystr = [[NSMutableArray alloc] initWithObjects:@"hello",@"world",@"etc",nil];

NSString *obj = @"hiagain";

[mystr addObject:obj];

0

第二行你正在将一个NSArray的实例而不是NSMutableArray重新分配给你的mystr变量。

尝试像这样:

NSMutableArray *mystr = [NSMutableArray  arrayWithObjects:@"hello",@"world",@"etc",nil];

[mystr addObject:@"hiagain"]

0

啊哈,我已经发现了

第二行应该是:

[NSMutableArray arrayWithObjects:@"hello",@"world",@"etc",nil];

非常抱歉浪费了您的时间!


我想你的意思是NSMutableArray! - emrys57

0
你最初将mystr创建为可变数组,但是在下一行将其分配给标准的NSArray。不要调用"arrayWithObjects",而是使用"addObjects"或其他不会创建新的不可变数组的函数来添加每个项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接