2016-10-07 4 views
6

Я использую sqlite в моем проекте iOS для базы данных. В iOS 9 все работает отлично. Теперь у меня есть обновленный Xcode. Но приложение несколько раз падает на «sqlite3_prepare_v2».sqlite3_prepare_v2 exc_bad_access в iOS 10

Кроме того, я не закрываю сверхурочную базу данных. И откройте его только один раз. Я добавил DB open в нижнем коде b'acs в отладке, и я получил DB close. Но все равно потерпел крушение.

crash

Может кто-нибудь мне помочь?

Заранее спасибо

+1

Я также сталкиваются с той же проблемы, пожалуйста, помогите, если кто-то сталкивался с такой же. ЛЮБАЯ ПОМОЩЬ БУДЕТ БОЛЬШЕ ПРИНЯТЬ. –

+0

Единственный намек, который я вижу из этого, - «address = 0x0». Проверьте значения, которые вы передаете на вызов, чтобы убедиться, что они не являются неожиданно нулевыми. –

+0

Я не передаю ничтожное значение. Приложение сбой при выполнении 'sqlite3_prepare_v2'. –

ответ

0

Я думаю, что вопрос находится в строке 2592.

Не обрабатывайте ключ как строку при прохождении его sqlite3_key (...) Не знаю, как вы генерировать ключ, но если первый байт установлен «\ 0», то STRLEN возврата 0 (что может произойти довольно часто, если вы используете какой-то сгенерированный помощник, основанный на NSData случайных байт)

определение

sqlite3_key:

SQLITE_API int SQLITE_STDCALL sqlite3_key(sqlite3 *db, const void *pKey, int nKey) 

Он ожидает Nkey байт, где «\ 0» допускается слишком

Вместо этого попробуйте:

NSData *passBytes = [g_sqlite_key dataUsingEncoding:NSUTF8StringEncoding]; 
int status = sqlite3_key(contactDB, passBytes.bytes, passBytes.length); 
if (status != SQLITE_OK) { 
     // handle error and return 
} 
// continue... 
Смежные вопросы