3

これが私のシナリオです。

アプリにログインするときに複数のリクエストがあり、そのうちの 1 つに 10,000 件以上のレコードが含まれています。

プロジェクトで SQLite.swift を使用しています。

ユーザーがログアウトしないか、データベースからデータを検索または取得するなどのタスクを 1 つ以上実行しない場合、すべて正常に機能しています。いずれかのケースが発生すると、アプリがスタックまたはクラッシュします。

一括挿入にトランザクションを使用していますが、別の同じテーブル データにアクセスしようとすると、すべてが完了するまでアプリがフリーズします。

複数の接続を使用してデータベースに挿入しようとしましたが、別の接続がデータベースを使用している場合、そのデータベースはロックされ、アプリがクラッシュします

致命的なエラー: 「試してください!」式が予期せずエラーを発生させました: データベースがロックされています: ファイル /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-703.0.18.1/src/swift/stdlib/public/core/ErrorType.swift、54 行目

try DataManager.con.transaction {

            for index in 0 ... (entity.count - 1) {
            try DataManager.con.run(table.insert(
                    Latitude <- entity[index]["Latitude"].string,
                    Longitude <- entity[index]["Longitude"].string
                ))
            }
        }

ここで DataManager.con はシングルトン オブジェクトです

助けてください。

4

1 に答える 1

0

sqlite.swift では、同時接続を作成できませんでした。

そのため、マスター データを別のデータベースに移動し、別の接続を作成しました。

私も追加しました

do{
// Start transaction
// code
// Commit transaction
}
catch {
}

ユーザーがログアウトしたり、アプリを閉じたりした場合のエラーを処理するために、トランザクションは部分的なデータの保存も維持するのに役立ちます

助けてくれたすべての人に感謝します。

于 2016-07-25T05:58:57.013 に答える