如何在SQLite中使用带有Monotouch for iOS的FTS

sho*_*hoe 1 sqlite full-text-search xamarin.ios fts3

我正在寻找使用Monotouch构建iOS应用程序,该应用程序具有相当大的sqlite db文本.我需要提供快速搜索本文.

我现在最好的解决方案是FTS模块(最好是版本4).我已经读过iOS上的sqlite的默认实例不支持FTS.如果这是真的,使用Monotouch构建自定义sqlite实例的建议方法是什么?或者这可以完成吗?

我发现这个网站描述了如何使用xcode实现这一目标,但目前还不清楚我将如何用Monotouch完成.
http://longweekendmobile.com/2010/06/16/sqlite-full-text-search-for-iphone-ipadyour-own-sqlite-for-iphone-and-ipad/

任何帮助深表感谢!

sho*_*hoe 5

正如我在上面的评论中提到的,我得到了这个工作,因为Stack Overflow真的帮助了我,我想贡献一点回馈社区.
免责声明
这是来自.NET开发人员,当涉及iOS/MacOS/XCode/Monotouch时,他是N00B.
虽然我在iPad模拟器上测试了这一点,但我还没有在实际设备上测试它.
结束免责声明

这是一个快速的方法来编译自己的SQLite版本并将其包含在Monotouch项目中,目的是支持全文搜索.

第1步:下载SQLite合并文件.

这包括一个文件中的所有SQLite.
http://www.sqlite.org/download.html

第2步:在Xcode for iOS中编译SQLite源代码.

关于如何在此处执行此操作有一个很好的演练: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中作为任何其他文件,右键单击它并确保构建操作为"Nothing".

在项目选项中选择"iPhone Build".您需要添加其他mtouch参数.添加以下内容

-gcc_flags "-L${ProjectDir} -lmylibrary -force_load ${ProjectDir}/mylibrary.a"
Run Code Online (Sandbox Code Playgroud)

第4步:构建ac#wrapper
你可能会找到一个好的包装器,但是我很快就推出了自己的包装器.

有关在C#中编写SQLite包装器的好教程,请查看此页面: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);
Run Code Online (Sandbox Code Playgroud)

将包装器组合起来显然还有很多,但是有很多关于如何做到这一点的信息.一个问题是正确编组从SQLite返回的字符串.(有关Marshaling的更多信息,请参见http://blog.gebhardtcomputing.com/2007/11/marshal-utf8-strings-in-net.html)

这是一个关于将本地库编译成MonoDevelop/monotouch的快速演练,我希望它可以帮助某人.