如何通过 SQLCipher 在后台使用 FMDB?

How to use FMDB in background with SQLCipher?

我在后台进行查询时遇到一些问题。

我从互联网上下载了一个 JSON,用 Reskit 解析它并用 FMDB 将一组对象保存到我用 SQLCipher 加密的 sqlite3 数据库中。

这是一个例子:

FMDatabaseQueue *_queueSelect = [FMDatabaseQueue databaseQueueWithPath:[DataBaseController getPathBaseDatos]];

    [_queueSelect inDatabase:^(FMDatabase *db) {

        [db setKey:DATABASE_KEY];

        FMResultSet *existeConsulta = [db executeQuery:sql];
            while([existeConsulta next]) {

                [results addObject:[existeConsulta resultDictionary]];

            }
    }];

我尝试使用 "inTransaction" "dispatch_async" 但没有成功。

完成这项任务的正确方法是什么?

为了运行这个异步,FMDatabaseQueue不给你做这个异步操作,只是给你一个框架,让你从多线程和这个队列交互的时候,交互会为您同步

因此,可以 (a) 为整个应用程序实例化一个 FMDatabaseQueue 对象; (b) 当你想 运行 一些异步的东西时,你必须 运行 来自后台调度或操作队列。

例如:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT), ^{
    [_queueSelect inDatabase:^(FMDatabase *db) {
        // do your stuff here
    }];
});