Question

Je cherche à construire une application iOS utilisant MonoTouch qui a une assez grande sqlite db plein de texte. Je dois fournir une recherche rapide sur ce texte.

Ma meilleure solution est actuellement le module FTS (de préférence version 4). J'ai lu que l'instance par défaut de sqlite sur iOS ne supporte pas les actions accréditives. Si cela est vrai, quelle est la méthode recommandée pour construire une instance personnalisée de SQLite avec MonoTouch? Ou cela peut être fait du tout?

J'ai trouvé ce site qui décrit comment accomplir cela avec Xcode, mais on ne sait pas comment j'accomplir avec MonoTouch.

Autres conseils

Comme je l'ai mentionné dans mon commentaire ci-dessus, je suis arrivé ce travail et depuis Stack Overflow m'a vraiment aidé, je voulais contribuer un peu à redonner à la communauté.
Disclaimer Cela vient d'un développeur .NET qui est un N00B quand il vient à iOS / Mac OS / XCode / MonoTouch.
Bien que je testé sur l'iPad simulateur je dois encore le tester sur un périphérique réel.
disclaimer de fin

Ceci est un rapide Comment compiler votre propre version de SQLite et l'inclure dans votre projet MonoTouch dans le but de soutenir la recherche plein texte.

Étape 1: Téléchargez le fichier de fusion SQLite.

Cela inclut tous SQLite dans un seul fichier.
http://www.sqlite.org/download.html

Étape 2:. Compile la source SQLite dans Xcode pour iOS

Il y a une bonne procédure pas à pas sur la façon de le faire ici:
http: //pp.hillrippers .ch / blog / 2009/08/08 / statique + SQLite + Bibliothèque + avec + Unicode + support + pour + le + iPhone /

J'ai suivi les étapes 1-5, # 6 sautais puisque nous ne sommes pas l'ajout d'en-têtes supplémentaires.

Au lieu d'utiliser les drapeaux de compilation utilisés dans la promenade à travers je:
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS4

Il peut y avoir d'autres que vous voulez ajouter aussi bien.
Ces drapeaux de compilation sont ajoutés dans XCode, à l'onglet « Build » du projet sous « préprocesseur macros ».

Une fois que vous avez compilé vous devriez avoir "mylibrary.a".

Étape 3: Intégrer ce fichier dans votre projet MonoDevelop Ajouter mylibrary.a dans MonoDevelop comme tout autre fichier, cliquez droit et assurez-vous que l'action de construction est « rien ».

Dans les options de projet, sélectionnez "iPhone Build". Vous devez ajouter des arguments de mTouch supplémentaires. Ajoutez les lignes suivantes

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

Étape 4: Construire un emballage c # Vous pouvez probablement trouver un bon emballage pour inclure à ce moment, mais je viens rapidement roulé ma propre.

Pour un bon tutoriel sur écrire un wrapper SQLite en C # vérifier cette page sur:
http://www.switchonthecode.com/tutorials/csharp-tutorial- écrit-a-dotnet-wrapper-pour-sqlite

Parce que votre bibliothèque est une partie du projet que vous n'avez pas besoin de faire référence à la bibliothèque par nom mais au lieu d'utiliser le mot-clé « __Internal ». * NB DEUX des underscores dans « __INTERNAL » * (Ne me demandez pas combien de temps je perdu avant que je réalise que)

Voici un exemple d'une de mes

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

Il y a évidemment beaucoup plus à mettre sur pied une enveloppe, mais il y a beaucoup d'informations là-bas sur la façon de le faire. Un Gotcha est de rassembler correctement les chaînes que vous obtenez est revenu de SQLite. (Voir http://blog.gebhardtcomputing.com/2007/11/marshal- chaînes de UTF8-en-net.html pour plus d'informations sur marshaling)

Ce devait être une soluce rapide sur l'obtention d'une bibliothèque native compilé dans MonoDevelop / MonoTouch, et j'espère que cela aide quelqu'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top