質問

私が引っ張ってSQLiteのデータベースからデータをプッシュしています。私はFMDatabaseココアラッパーを使用します。

私が引っ張り、押し、データを複数のスレッドから、私は確かにもっとそして1つのトランザクションが同時に起こることはないと判断しています。

私は、データベースで決して同時に数百回のコールの後EXC_BAD_ACCESSを取得します。また、関連するメモリ(私はNSZombiesを試してみましたが、パラメータのメモリ管理で見てきた)ではありません。

ここでスタックとコードがあります:

ALTテキスト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"];

私は考え、誰かが1つを持っているのでしょうか?

を得なかっました
役に立ちましたか?

解決

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

この手段SQLite-UTF8Stringリターンは現在の自動解放コンテキストでのみ有効である一方、テキストストレージは、長いテキスト遺骨がバインドされているように有効なままであることを前提としています。あなたが複数のスレッドまたは関数呼び出しの上に同じFMResultSetを使用している場合は、SQLITE_TRANSIENTにそのパラメータを変更すると、より安全になります。

私はすべてのsqlite3_bind_text()呼び出しでその変更を作り、それがまだクラッシュした場合に見てお勧めしたいです。その修正した場合、それは、あなたが可能な改善として開発者に戻ってそれを報告したいことがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top