【问题标题】:NSMutableArray count always returns zeroNSMutableArray 计数始终返回零
【发布时间】:2009-03-11 08:09:23
【问题描述】:

我确定我在做一些愚蠢的事情,但这让我发疯。

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

下面是代码的精髓:

while ([rs next]) {

    Kana *htemp = [Kana alloc];

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

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

假名派生自 NSObject,平假名是 NSMutableArray 的一个实例。

我确定这是一个菜鸟错误,我希望有人能纠正我。蒂亚! :)

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

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

    Kana *htemp = [Kana alloc];
    

    应该是:

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

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

    NSMutableArray *hiragana = [NSMutableArray alloc];
    

    到这里:

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

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

    [[NSMutableArray alloc] initWithCapacity:someNumber];
    

    【讨论】:

    • 您的回答很好 - 您还应该包括下面提到的建议,以便在将 htemp 对象添加到数组后释放它,否则会导致内存泄漏。
    • 感谢您的提问和回答……它对我有帮助! (n_n)
    【解决方案2】:

    另一个常见原因(不是你的情况,事实证明,但通常情况下)是甚至忘记分配数组。如果您还没有创建数组,则将 count 消息发送到 nil,因此结果将始终为 0。

    【讨论】:

      【解决方案3】:

      一些事情:

      1. 如果在 while 循环中调用 NSLog 会发生什么?在将循环迭代归咎于数组之前,请验证循环迭代是否实际发生。
      2. 您在哪里创建数组平假名?如果由于某种原因你做错了并且数组为 nil,它可能会导致这样的问题。
      3. 如果您没有开启垃圾回收,请务必在将其添加到循环后执行 [htemp release]。 addObject 保留,每个添加的项目将从循环中泄漏。同样,这仅在垃圾收集关闭时才相关。

      很可能是您没有正确创建数组,或者 rs 不包含您期望它包含的内容,因此 [rs next] 永远不会被调用(例如,如果 rs 为 nil,则不会此循环的迭代将执行并且您不会有任何错误)。

      【讨论】:

      • 啊...这是错误的数组初始化 FTW! :) 谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多