Closed HebeTienCoder closed 8 years ago
清理磁盘存储的时候,经常会崩溃在这一句。
sqlite3_stmt stmt = (sqlite3_stmt )CFDictionaryGetValue(_dbStmtCache, (__bridge const void *)(sql));
具体在下面这个函数中,报错是Thread34:EXC_BAD_ACCESS
- (sqlite3_stmt *)_dbPrepareStmt:(NSString *)sql { if (![self _dbIsReady]) return NULL; sqlite3_stmt *stmt = (sqlite3_stmt *)CFDictionaryGetValue(_dbStmtCache, (__bridge const void *)(sql)); if (!stmt) { int result = sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stmt, NULL); if (result != SQLITE_OK) { if (_errorLogsEnabled) NSLog(@"%s line:%d sqlite stmt prepare error (%d): %s", __FUNCTION__, __LINE__, result, sqlite3_errmsg(_db)); return NULL; } CFDictionarySetValue(_dbStmtCache, (__bridge const void *)(sql), stmt); } else { sqlite3_reset(stmt); } return stmt; }
尝试修复了下,但不清楚产生问题的具体原因。
我这边也不是每次都出现,出现的时候都是_dbStmtCache为空0x0
那这个 https://github.com/ibireme/YYCache/commit/3ce0262a158242820e50d13b15d7953d81614f1c 应该能 fix 了。
恩恩,感谢!
清理磁盘存储的时候,经常会崩溃在这一句。
sqlite3_stmt stmt = (sqlite3_stmt )CFDictionaryGetValue(_dbStmtCache, (__bridge const void *)(sql));
具体在下面这个函数中,报错是Thread34:EXC_BAD_ACCESS
- (sqlite3_stmt *)_dbPrepareStmt:(NSString *)sql { if (![self _dbIsReady]) return NULL; sqlite3_stmt *stmt = (sqlite3_stmt *)CFDictionaryGetValue(_dbStmtCache, (__bridge const void *)(sql)); if (!stmt) { int result = sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stmt, NULL); if (result != SQLITE_OK) { if (_errorLogsEnabled) NSLog(@"%s line:%d sqlite stmt prepare error (%d): %s", __FUNCTION__, __LINE__, result, sqlite3_errmsg(_db)); return NULL; } CFDictionarySetValue(_dbStmtCache, (__bridge const void *)(sql), stmt); } else { sqlite3_reset(stmt); } return stmt; }