Frage

Ich möchte eine iOS -App mit Monotouch erstellen, die einen ziemlich großen SQLite -DB voller Text hat. Ich muss schnell über diesen Text suchen.

Meine derzeit beste Lösung ist das FTS -Modul (vorzugsweise Version 4). Ich habe gelesen, dass die Standardinstanz von SQLite auf iOS keine FTS unterstützt. Wenn dies wahr ist, wie ist die empfohlene Möglichkeit, eine benutzerdefinierte Instanz von SQLite mit Monotouch zu erstellen? Oder kann das überhaupt getan werden?

Ich fand diese Seite, die beschreibt, wie man dies mit Xcode erreicht, aber es ist nicht klar, wie ich mit Monotouch erreichen würde.
http://longweekendmobile.com/2010/06/16/sqlite-full-text-search-for-iphone-ipadyour-own-own-ow-wid-wid-wind-for-iphone-and-ipad/

Jede Hilfe wird sehr geschätzt!

War es hilfreich?

Lösung

Sie müssten dasselbe tun, Ihre eigenen libsqlite3.a bauen und alle öffentlichen Exporte magen, damit sie nicht mit dem vom System geladenen Libsqlite in Konflikt stehen, und dann müssten Sie die Bibliothek ändern, an die Sie binden möchten, an die Sie binden möchten sqlite an [dllimport ("__internal")] anstelle von libsqlite.

Andere Tipps

Wie ich in meinem Kommentar oben erwähnt habe, habe ich dieses funktioniert und da Stack Overflow mir wirklich geholfen hat, wollte ich ein wenig dazu beitragen, der Community etwas zurückzugeben.
Haftungsausschluss
Dies kommt von einem .NET -Entwickler, der ein N00B ist, wenn es um iOS/macOS/xcode/monotouch geht.
Obwohl ich dies auf dem iPad -Simulator getestet habe, muss ich ihn noch auf einem tatsächlichen Gerät getestet.
Ende Haftungsausschluss

Dies ist eine schnelle Anleitung, Ihre eigene Version von SQLite zu kompilieren und sie in Ihr Monotouch-Projekt mit dem Ziel der Unterstützung der Volltext-Suche aufzunehmen.

Schritt 1: Laden Sie die SQLite -Amalgamation -Datei herunter.

Dies schließt alle SQLite in einer Datei ein.
http://www.sqlite.org/download.html

Schritt 2: Kompilieren Sie die SQLite -Quelle in Xcode für iOS.

Es gibt eine gute Exemplar, wie man das hier macht:
http://pp.hillrippers.ch/blog/2009/08/08/static+Sqlite+Library+With+unicode+Support+For+The+Iphone/

Ich folgte den Schritten 1-5, übersprungen #6, da wir keine zusätzlichen Header hinzufügen.

Anstatt die Kompilierflags zu verwenden, die im Durchgang verwendet wurden, habe ich verwendet:
Sqlite_enable_column_metadata
Sqlite_enable_fts4

Es kann auch andere geben, die Sie auch hinzufügen möchten.
Diese Kompilierflags werden in Xcode auf die Registerkarte "Build" des Projekts unter "Präzessor -Makros" hinzugefügt.

Sobald Sie dies zusammengestellt haben, sollten Sie "mylibrary.a" haben.

Schritt 3: Fügen Sie diese Datei in Ihr Monodevelop -Projekt ein
Fügen Sie Mylibrary.a in Monodevelop als jede andere Datei hinzu, klicken Sie mit der rechten Maustaste und stellen Sie sicher, dass die Build -Aktion "nichts" ist.

Wählen Sie in Ihren Projektoptionen "iPhone Build". Sie müssen zusätzliche MTouch -Argumente hinzufügen. Fügen Sie Folgendes hinzu

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

Schritt 4: AC# Wrapper bauen
Sie könnten wahrscheinlich einen guten Wrapper finden, der zu diesem Zeitpunkt aufgenommen werden kann, aber ich habe nur schnell meine eigenen gerollt.

Für ein gutes Tutorial zum Schreiben eines SQLite -Wrappers in C# Überprüfen Sie diese Seite:
http://www.switchonthecode.com/tutorials/csharp-tutorial-writing-a-dotnet-wrapper-for-sqlite

Da Ihre Bibliothek ein Teil des Projekts ist, müssen Sie nicht auf die Bibliothek verweisen, sondern verwenden Sie das Schlüsselwort "__internal". * Beachten Sie, dass es zwei Unterstriche in "__internal" * gibt (fragen Sie mich nicht, wie viel Zeit ich verschwendet habe, bevor ich das merkte)

Hier ist eine Stichprobe eines von mir

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

Es gibt offensichtlich viel mehr, um einen Wrapper zusammenzustellen, aber es gibt viele Informationen, wie man das macht. Eine Gotcha ist, die Saiten, die Sie von SQLite zurückzugeben, ordnungsgemäß marschallieren. (sehen http://blog.gebhardtcomputing.com/2007/11/marshal-utf8-strings-in-net.html Für weitere Informationen zum Marschalling)

Dies sollte eine schnelle Anleitung sein, wie eine einheimische Bibliothek in Monodevelop/Monotouch zusammengestellt wurde, und ich hoffe, es hilft jemandem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top