我确定我做的事情很傻,但这让我发疯了。
我正在尝试遍历数据库结果,从这些结果创建对象,并将对象添加到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! :)
答案 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)
一些事情:
最有可能的是你没有正确地创建数组或者rs不包含你期望它包含的内容,因此[rs next]不会被调用(如果rs为nil,例如,no这个循环的迭代会执行,你不会有任何错误。)