2

sqlite データベースからデータをプルおよびプッシュしています。FMDatabase ココア ラッパーを使用します。

複数のスレッドからデータをプルおよびプッシュしていますが、複数のトランザクションが同時に発生しないようにしました。

EXC_BAD_ACCESSデータベースで数百回の呼び出しを行いましたが、同時に取得することはありません。また、メモリ関連ではありません (NSZombies を試し、パラメータのメモリ管理を調べました)。

スタックとコードは次のとおりです。

代替テキスト http://grab.by/1VwY

FMResultSet* result = [db executeQuery:@"select latitude, longitude from cache where name = ?", name];
[result next];

NSString* latitude = [result stringForColumn:@"latitude"];
NSString* longitude = [result stringForColumn:@"longitude"];

よくわからんけど持ってる人いる?

4

1 に答える 1

2

の関連するコードを見るFMDatabaseと、sqlite_bind_text()ルーチンはパラメーターを使用して結果のメソッド (ポインターを返す)SQLITE_STATICをバインドしているようです。NSString-UTF8Stringautoreleased

これはSQLite、テキストがバインドされている限り、テキスト ストレージが有効であり続けることを前提としていますが、-UTF8String戻り値は現在の autorelease コンテキストに対してのみ有効です。FMResultSet複数のスレッドまたは関数呼び出しで同じものを使用している場合は、そのパラメーターを に変更するSQLITE_TRANSIENT方がはるかに安全です。

sqlite3_bind_text()すべての呼び出しでその変更を行い、それでもクラッシュするかどうかを確認することをお勧めします。これで問題が解決した場合は、改善の可能性として開発者に報告することをお勧めします。

于 2010-01-24T16:29:38.273 に答える