NSMutableArray计数始终返回零

时间:2009-03-11 08:09:24

标签: objective-c cocoa

我确定我做的事情很傻,但这让我发疯了。

我正在尝试遍历数据库结果,从这些结果创建对象,并将对象添加到NSMutableArray。我已通过NSLog调用验证数据正在从数据库中正确读取并复制到对象,但NSMutableArray 总是的计数返回0.

这是代码的本质:

while ([rs next]) {

    Kana *htemp = [Kana alloc];

    htemp.content = [rs stringForColumn:@"hiragana"];
    [hiragana addObject:htemp];

}
NSLog(@"Hiragana contains %d objects", [hiragana count]);

Kana来自NSObject,而平假名是NSMutableArray的一个实例。

我确信这是一个新手的错误,我希望有人可以帮我。 TIA! :)

3 个答案:

答案 0 :(得分:39)

我的猜测,从您发布的代码判断,您可能没有正确分配数组。创建对象时,还需要初始化它们。因此,这个:

Kana *htemp = [Kana alloc];

应该是:

Kata *temp = [[Kana alloc] init];

所有对象都需要以这种方式进行初始化。因此,如果我是正确的并且你没有初始化你的数组,那么你的创建需要从这里开始:

NSMutableArray *hiragana = [NSMutableArray alloc];

到此:

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

出于优化原因,如果您知道可能有多少个对象,也应该指定一个初始容量:

[[NSMutableArray alloc] initWithCapacity:someNumber];

答案 1 :(得分:2)

另一个常见原因(不是在你的情况下,事实证明,但一般而言)是忘记甚至分配数组。如果您尚未创建数组,则会将count消息发送给nil,因此结果将始终为0.

答案 2 :(得分:0)

一些事情:

  1. 如果在while循环中放入NSLog调用会怎样?在将其归咎于阵列之前,验证循环迭代是否实际发生。
  2. 你在哪里创建平假名阵?如果由于某种原因你做错了而且数组是nil,则可能会导致这样的问题。
  3. 如果您没有打开垃圾收集,请确保在将其添加到循环后执行[htemp release]。 addObject保留,每个添加的项将从循环中泄漏。同样,这仅在垃圾收集关闭时才有意义。
  4. 最有可能的是你没有正确地创建数组或者rs不包含你期望它包含的内容,因此[rs next]不会被调用(如果rs为nil,例如,no这个循环的迭代会执行,你不会有任何错误。)