Вопрос

Я хочу построить приложение для iOS, используя монотуш, у которого довольно большой SQLite DB, полный текста. Мне нужно быстро поиск по этому тексту.

Мое лучшее решение сейчас - модуль FTS (предпочтительно версия 4). Я читал, что экземпляр SQLite по умолчанию на iOS не поддерживает FTS. Если это правда, какой рекомендуемый способ создать пользовательский экземпляр SQLite с Monotouch? Или это можно сделать вообще?

Я обнаружил, что этот сайт описывает, как это сделать с помощью XCode, но неясно, как я бы достигнут с помощью Monotouch.
http://longweekendmobile.com/2010/06/16/sqlite-full-text-search-for-iphone-ipadyour-own-sqlite-for-iphone-and-ipad/

Любая помощь высоко ценится!

Это было полезно?

Решение

Вам нужно было бы сделать то же самое, построить свой собственный libsqlite3.a и выпустить все общественные экспорты, чтобы он не конфликтовал с Libsqlite, загруженным системой, и тогда вам нужно изменить любую библиотеку, с которой вы хотите привязать sqlite to [dllimport ("__internal")] вместо libsqlite.

Другие советы

Как я уже упоминал в своем комментарии выше, я получил эту работу, и, поскольку Stack Overflow действительно помог мне, я хотел немного внести свой вклад, чтобы вернуть сообществу.
Отказ от ответственности
Это исходит от разработчика .NET, который является N00B, когда дело доходит до iOS/macOS/XCODE/Monotouch.
Хотя я проверил это на симуляторе iPad, мне еще предстоит проверить его на реальном устройстве.
Конечный отказ от ответственности

Это быстрое составление вашей собственной версии SQLite и включите ее в свой проект Monotouch с целью поддержки полного текстового поиска.

Шаг 1: Загрузите файл объединения SQLite.

Это включает в себя все SQLite в одном файле.
http://www.sqlite.org/download.html

Шаг 2: Составьте источник SQLite в XCODE для iOS.

Есть хорошее прохождение о том, как это сделать здесь:
http://pp.hillrippers.ch/blog/2009/08/08/static+sqlite+library+with+unicode+support+for+The+iphone/

Я выполнил шаги 1-5, пропустил № 6, так как мы не добавляем дополнительные заголовки.

Вместо использования флагов компиляции, используемых в прогулке, я использовал:
Sqlite_enable_column_metadata
Sqlite_enable_fts4

Могут быть и другие, которые вы хотите добавить.
Эти компиляции добавляются в XCode, на вкладку «сборка» проекта в разделе «Предварительные макросы».

После того, как вы собрали это, у вас должен быть "mylibrary.a".

Шаг 3: Включите этот файл в свой проект Monodevelop.
Добавьте mylibrary.a в Monodevelop как любой другой файл, щелкните правой кнопкой мыши и убедитесь, что действие сборки «ничего».

В вариантах вашего проекта выберите «Построение iPhone». Вам нужно добавить дополнительные аргументы MTOUCH. Добавьте следующее

-gcc_flags "-L${ProjectDir} -lmylibrary -force_load ${ProjectDir}/mylibrary.a"

Шаг 4: Постройте AC# Обертка
Вы, вероятно, могли бы найти хорошую обертку, чтобы включить в этот момент, но я просто быстро свернул свой собственный.

Для хорошего урока по написанию обертки SQLite в C# Проверьте эту страницу:
http://www.switchonthecode.com/tutorials/csharp-tutorial-writing-a-dotnet-wrapper-for-sqlite

Поскольку ваша библиотека является частью проекта, вам не нужно ссылаться на библиотеку по имени, а вместо этого используйте ключевое слово «__internal». * Обратите внимание, что в «__internal» есть два подчеркивания (не спрашивайте меня, сколько времени я потратил, прежде чем я понял это)

Вот образец одного из моих

[DllImport ("__Internal", EntryPoint="sqlite3_open")]  
static extern int sqlite3_open_v2(string filename, out IntPtr db);

Очевидно, есть гораздо больше, чтобы собрать обертку, но есть много информации о том, как это сделать. Один из них - правильно маршала струны, которые вы возвращаете из SQLite. (видеть http://blog.gebhardtcomputing.com/2007/11/marshal-utf8-strings-in-net.html Для получения дополнительной информации о маршалинге)

Это было предназначено для быстрого прохождения в том, чтобы собрать нативную библиотеку в Monodevelop/Monotouch, и я надеюсь, что это кому -то поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top