可能的 FMDatabase/FMResultSet 错误

Posted

技术标签:

【中文标题】可能的 FMDatabase/FMResultSet 错误【英文标题】:Possible FMDatabase/FMResultSet bug 【发布时间】:2011-05-23 09:22:18 【问题描述】:

尽管我很少遇到 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 循环中使用它们。

我错过了什么吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢@Greg M.!为什么他不接受答案?完全正确。

以上是关于可能的 FMDatabase/FMResultSet 错误的主要内容,如果未能解决你的问题,请参考以下文章

每个循环可能会或可能不会运行 CDialog 的无限线程

在堆栈大小和可能的溢出方面是不是可能有太多方法?

当空引用似乎不可能时,为啥我们会收到可能的取消引用空引用警告?

如何(廉价)计算 n 个可能元素的所有可能的长度-r 组合

添加到可能存在也可能不存在的 json 属性

智能投射到“DrawerLayout!”是不可能的,因为 'drawerLayout' 是一个可变属性,此时可能已更改