NSMutableArray addObject不工作

问题描述:

我已经在我的视图控制器.h文件中声明了一个NSMutableArray *categories,并为它声明了一个属性。NSMutableArray addObject不工作

在我的.m文件的NSXMLParser委托的parser:foundCharacters:方法,我有这样的代码:

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string 
{ 
    if (elementFound) 
    { 
     element = string; 
     [self.categories addObject:element]; 
    } 
} 

但是当我踏入它在调试模式后,将鼠标悬停在[self.categories addObject:element]线时,Xcode告诉我,大小是0x0,0个对象。在我的XML文件中有3个元素,所以3个元素应该在数组中。

我错过了一些非常明显的东西,我找不出什么。

+3

为了您的未来发布:格式化代码的方式是选择代码块,并使用帖子编辑器顶部的“代码”格式化程序按钮缩进所有4个空格。 –

+0

对不起 - 我从另一个论坛复制并粘贴,猜测格式化没有多少支持!谢谢 – joec

“0x0”部分是内存地址。具体来说,“nil”,这意味着你的可变数组在调用时不存在。尝试在-init方法中创建它:

categories = [[NSMutableArray alloc] init]; 

不要忘记将它释放到您的-dealloc中。

+11

我不知道为什么我一直忘记这么做。谢谢。 – James

+17

(2012更新:如果您使用的是ARC,release/dealloc部分可以忽略。) –

+4

谢谢!在Objective-C中很容易忘记那些无对象引用的消息。 – JasonD

初始化使用

categories = [NSMutableArray array]; 

阵列类方法自动释放所以没必要释放空数组。

+0

Vishu - 您的解决方案正在运行,但我认为Joshua Nozzi的解决方案更好,因为它需要更少的内存。 –

+0

这在功能上等同于我的回答5年半ealier,只是使用便捷方法而不是alloc/init。内存使用情况没有区别,结果完全相同。 –

@property (Strong, nonatomic) NSMutableArray * yourArray; 

,你必须使用

+0

这没有回答这个问题 - 数组没有被初始化,所以它不存在(所以是零)。另外,'strong'是ObjC 2属性的默认值,但我们不知道如何从给定的代码声明它。我们所知道的是它在运行时不存在,并且看起来像是一个类的ivar,所以我们只知道问题是在调用方法时没有分配数组。它*可能*在创建时已创建并在其他地方删除。我的观点是这个答案提出了很多假设,并且非常模糊。我没有看到它增加了更老的接受答案。 –