如何通过 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
}];
});
我在后台进行查询时遇到一些问题。
我从互联网上下载了一个 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
}];
});