如果我执行sqlite3写入(插入/更新/删除)操作,我的应用程序有时会崩溃EXC_BAD_ACCESS
。iOS - 如何在多线程中正确执行sqlite3写入操作?
创建dispatch_queue_t
:
dispatch_queue_create("example.testQueue", DISPATCH_QUEUE_CONCURRENT);
-dealData: paramsarray:
- (BOOL)dealData:(NSString *)sql paramsarray:(NSArray *)params {
__block BOOL result = NO;
dispatch_sync(_dbQueue, ^{
sqlite3_stmt *stmt = nil;
//prepare
int code = sqlite3_prepare_v2(self.sqlite, [sql UTF8String], -1, &stmt, NULL);
if (code != SQLITE_OK) {
NSLog(@"SQL error:%@, %@, %s", sql, params, sqlite3_errmsg((__bridge sqlite3 *)(self)));
}
else {
//bind
for (int i=0; i<params.count; i++) {
NSString *value = safeString([params objectAtIndex:i]);
sqlite3_bind_text(stmt, i+1, [value UTF8String], -1, SQLITE_TRANSIENT);
}
//step
if(sqlite3_step(stmt) == SQLITE_ERROR) { // crash at this line
NSLog(@"SQL step failed:%@", sql);
}
else {
sqlite3_finalize(stmt);
result = YES;
}
}
});
return result;
}
它通过在多个线程同时写入数据似乎原因。我不知道如何处理这个问题。
显示您的完整代码! – Lion