2

尽管我很少遇到 FMDatabase 问题,但我今天注意到一些奇怪的行为,并且想知道这是一个错误还是由于我自己的错误。

NSString *query = [NSString stringWithFormat:@"SELECT * FROM TABLE_A WHERE modelId = %lu", modelId];
FMResultSet *resultSet = [db executeQuery:query];

while ([resultSetIPTCProperties next]) {
    NSLog(@"MODEL ID: %lu", [resultSetIPTCProperties intForColumn:@"stringId"]);
}

奇怪的是,这一切都很好,但我想安全起见并在 while 循环之前使用 [db hasAnotherRow] 的 if 语句,但即使结果集确实包含结果,这也会返回 NO。

当我将结果字典(使用 FMResultSet 的 resultDict 方法)记录到控制台时,我收到来自 FMResultSet 的警告“警告:此集中似乎没有列”。即使我可以在我的 while 循环中使用它们。

我在这里错过了什么吗?

4

1 回答 1

16

您必须先调用 [resultSet next],然后才能调用 [resultSet resultDict],否则结果中的指针位于第一行之前。这也是您的循环有效的原因,但您对 hasAnotherRow 的检查却无效。

于 2012-01-07T19:18:53.050 回答