sqlite3_key отсутствует в заголовке в инфраструктуре iOS 11 [дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

7
задан Tariq 15 June 2011 в 11:03
поделиться

2 ответа

Да, именно по этой причине вы получаете предупреждение этого компилятора. Функция sqlite3_key () не определена в версии libsqlite3, включенной в iOS. Добавление в объявление функции не поможет - оно исправит это предупреждение компилятора, но это просто означает, что вы получите ошибку компоновщика, поскольку функция не определена нигде.

Если вы вы купили SEE, вы могли бы создать свою собственную копию SQLite, встроить ее в свое приложение и просто не использовать libsqlite3 системы. Это означает, что вам нужно будет сказать «да», когда в процессе подачи заявки на приложение спрашивает, включает ли ваше приложение шифрование, что означает дополнительную документацию и время, прежде чем вы сможете отправить приложение. Я не уверен, есть ли четкое указание на то, сможет ли Apple принять его даже тогда - вероятно, они будут, но они, как известно, удивляют людей.

6
ответ дан Tom Harrington 27 August 2018 в 21:35
поделиться

Если вы используете SQLCipher , вам нужно определить SQLITE_HAS_CODEC в флагах C вашего приложения. Вот и все.

20
ответ дан Hans-Christoph Steiner 27 August 2018 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: