如何在SQLCipher的后台使用FMDB?

时间:2015-11-10 13:59:21

标签: fmdb 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” 但没有成功。

执行此任务的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

要以异步方式运行,FMDatabaseQueue不会为您执行此异步操作,而只是为您提供一个框架,以便当您从多个线程与此队列进行交互时,将为您同步交互。 / p>

因此,人们会(a)为整个应用程序实例化一个FMDatabaseQueue对象; (b)当你想异步运行某些东西时,你必须从后台调度或操作队列中运行它。

例如:

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