如果我執行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