Objective c can';我不明白为什么NSMutableArray addObject不工作

Objective c can';我不明白为什么NSMutableArray addObject不工作,objective-c,nsmutablearray,Objective C,Nsmutablearray,可能重复: 在我的.h文件中有一个NSMutableArray声明为(非原子,retain),并进行了正确的合成。tempRandomWord是一个始终填充的NSString。但是,count始终返回0。你知道为什么吗 [pastWords addObject:tempRandomWord]; int count=[pastWords count]; NSLog(@"%i",count); 您可能忘记初始化数组。您需要在viewDidLoad或其他地方使用此行 pastWords = [NS

可能重复:

在我的.h文件中有一个NSMutableArray声明为(非原子,retain),并进行了正确的合成。tempRandomWord是一个始终填充的NSString。但是,count始终返回0。你知道为什么吗

[pastWords addObject:tempRandomWord];
int count=[pastWords count];
NSLog(@"%i",count);

您可能忘记初始化数组。您需要在viewDidLoad或其他地方使用此行

pastWords = [NSMutableArray array];
我个人喜欢把它们放在需要它们的地方,比如:

if (!pastWords) {
    pastWords = [NSMutableArray array];
}

[pastwords addObject:object];

您的数组未初始化。 在读取/使用属性之前,只需在某个地方添加延迟初始化

self.pastWords=self.pastWords?self.pastWords:[NSMutableArray array];
或者如果您直接使用IVAR:

pastWords=pastWords?pastWords:[NSMutableArray new];
或在init中进行正常初始化


如果从类外部分配该属性,则可能需要调用mutableCopy以确保使用可变数组,即使已分配NSArray。

可能重复,。是否在任何位置分配了
pastWords
?ie:
passwords=[[NSMutableArray alloc]init]
您也应该是
NSLog
-ing
tempRandomWord
。@Dan F-我没有,但我的印象是,如果我使用ARC,则声明的属性不需要这样做。我用同样的方式声明了其他NSMutableArray,但没有显式地编写分配或初始化,它们正在工作fine@user1418214所有数组都必须以某种方式分配和初始化,ARC在这方面是不相关的。ARC所做的就是您不必手动
保留
释放
属性。您必须以某种方式将这些其他数组分配给预构造的数组。请不要回答注释中明确指出重复的问题;相反,把你的答案贴在原稿上。