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 resultDict]を呼び出す前に、[resultSet next]を呼び出す必要があります。そうしないと、結果のポインターが最初の行の前になります。これがループが機能する理由でもありますが、hasAnotherRowのチェックは機能しません。

于 2012-01-07T19:18:53.050 に答える