ios sqlite fts扩展"没有这样的模块fts4"错误

时间:2014-01-27 09:23:02

标签: ios sqlite xcode5 fts4

我正在尝试根据本教程(here)设置CoreDataFMDB的索引数据库

我是ios的初学者,所以在添加

时我可能会出错
  

SQLITE_ENABLE_FTS3 SQLITE_ENABLE_FTS3_PARENTHESIS宏。

我将它们添加到Other C Flags。

这是我的代码:

- (void) setIndexDatabase
{
    // Create (or open) our database
    NSString *dbPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    dbPath = [dbPath stringByAppendingPathComponent:@"Index.sqlite"];

    // Using the FMDatabaseQueue ensures that we don't accidentally talk to our database concurrently from two different threads
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        [db executeUpdate:@"CREATE VIRTUAL TABLE IF NOT EXISTS docs USING fts4(name, contents);"];
    }];

    //Add content to index
    [queue inDatabase:^(FMDatabase *db) {
        [db executeUpdate:@"INSERT INTO docs (name, contents) VALUES(?, ?);", @"doc1", @"She sells sea shells by the sea shore."];
    }];

    //Search
    __block NSMutableArray *matches = [NSMutableArray array];
    [queue inDatabase:^(FMDatabase *db) {
        FMResultSet *resultSet = [db executeQuery:@"SELECT name FROM docs WHERE docs MATCH ?", @"she*"];
        while ([resultSet next]) {
            [matches addObject:[resultSet stringForColumn:@"name"]];
        }
    }];
}

编辑:

DB错误:1“没有这样的模块:fts4”

我在didFinishLaunchingWithOptions方法的app委托中调用此函数

2 个答案:

答案 0 :(得分:2)

只是为了确认;如果您的目标是iOS 6或更高版本,则无需构建自己的SQLite即可获得FTS。

答案 1 :(得分:1)

由于SQLite的构建不包括FTS模块,因此发生此错误。我尝试了另一种方法来克服它。我删除了有关SQLite和FMDB的所有文件。然后,我使用podfile将FMDB添加到我的项目中,并且它成功运行。