Pull to refresh

Полноценная поддержка юникода в SQLite для iOS. Пример приложения

Reading time 2 min
Views 4.3K
Здравствуйте. В этой статье я опишу процесс создания простейшего приложения для iOS и внедрение в него используемого мной метода для обеспечения корректной работы с русским (и не только) языком таких SQLite-конструкций, как UPPER/LOWER, LIKE или ORDER BY.

Описанный метод использовался при разработке в XCode 4.2 под управлением OS X Lion 10.7.2.

Ниже очень подробная инструкция с картинками.

Для начала

Нужно скачать необходимые файлы:

Создание нового проекта

Запускаем XCode, создаём новый проект с шаблоном iOS Application — Single View Application, нажимаем «Next»:
image

Вводим название проекта, снимаем галочки со всех чекбоксов, нажимаем «Next»
image

Выбираем директорию для сохранения проекта. Готово.
image

Добавление в проект поддержки SQLite

Слева в Project Navigator щелкаем по самому верхнему элементу иерархии, чтобы посмотреть информацию и свойства нашего проекта, внизу нажимаем кнопку «Add Target»
image

Выбираем iOS Framework & Library — Cocoa Touch Static Library, нажимаем Next
image

Вводим имя для будущей библиотеки. Finish.
image

Берем файлы, которые мы скачали в начале статьи, и тянем их в только что созданную группу (libsqliteunicode) в Project Navigator

В появившемся окне отмечаем галочками обе цели (Add to targets). Finish.
image

Опять открываем свойства проекта, из списка targets выбираем созданную libsqlunicode, переходим на вкладку build phases, разворачиваем список «Link Binary with Libraries» и убираем из него Foundation.framework.
image

Переходим на вкладку build settings и в параметре Preprocessor Macros устанавливаем значение
SQLITE_CORE SQLITE_ENABLE_UNICODE
image

Из списка targets выбираем sqliteunicode, переходим на вкладку build phases, разворачиваем список «Target Dependencies» и добавляем в него нашу libsqliteunicode
image

Работа с библиотекой.

Для того, чтобы всё это заработало так, как нам надо, в заголовочном файле контроллера вашей базы данных следует добавить строчки
#import "sqlite3.h"
#import "sqlite3_unicode.h"

Перед использованием базы данных, нужно вызвать
sqlite3_unicode_load();

После окончания работы с базой для освобождения памяти вызываем
sqlite3_unicode_free();

В остальном используем нашу библиотеку как обычную libsqlite3.dylib

Рабочий пример, демонстрирующий подключение базы и поиск по ней с помощью Search Bar and Search Display Controller: скачать (4 Мб)

UPD:
Вариант без перекомпиляции SQLite amalgamation:

  • Добавляем в проект стандартный libsqlite3.dylib
  • Добавляем туда же файлы sqlite_unicode.c и .h из примера в статье
  • Устанавливаем параметры препроцессора на SQLITE_CORE SQLITE_ENABLE_UNICODE
  • Компилим

Рабочий пример с измененным вариантом: Скачать (1.5 Мб)

Кстати, размер получившегося .app в первом варианте — 1 210 597 байт
Во втором — 266 332
Tags:
Hubs:
+11
Comments 6
Comments Comments 6

Articles