我在iOS(obj-c)项目中使用本地SQLITE数据库,我们选择使用FMDB。请注意我对更改为Core Data或从FMDB切换到其他库不感兴趣。
一切正常,但是当我们第一次运行应用程序数据从我们的服务器下载时,json被解析,然后被分类到本地数据库。由于信息量的增加需要30到40秒。理想情况下,这将在后台完成,但FMDB不允许这样做(至少据我所知),因为它可能会导致数据库数据完整性问题。
有没有人成功使用FMDB库在后台线程上运行所有查询,插入等?我试过简单地将动作包装在:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// ... query/insert/update/delete
});
...但我最终遇到了数据库完整性问题。任何提示或示例都会很棒。提前谢谢。
答案 0 :(得分:3)
@nawar - 很抱歉没有尽快发布。我最终在dispatch_async块中使用了FMDatabaseQueue(而不是FMDatabase)的单一实例。奇迹般有效。我遇到的问题是由于使用了FMDatabase。
答案 1 :(得分:0)
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
BOOL result = YES;
for (int i = 500; i < 1000; i++) {
result = [db executeUpdate:@"insert into testTable (name) values(?)",[NSString stringWithFormat:@"name-%d",i]];
if (!result) {
NSLog(@"break");
*rollback = YES;
break;
}
}
}];
});
&#13;