1

このチュートリアル( here)に従って、インデックスデータベースCoreDataを設定しようとしていますFMDB

私はios初心者なので、追加するときに何か間違ったことをしたかもしれません

SQLITE_ENABLE_FTS3 SQLITE_ENABLE_FTS3_PARENTHESIS マクロ。

その他の C フラグに追加しました。

これは私のコードです:

- (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 メソッドでアプリデリゲートでこの関数を呼び出しています

4

2 に答える 2

1

このエラーは、SQLite のビルドに FTS モジュールが含まれていないために発生しています。私はそれを克服するために別のアプローチを試みました。SQLite と FMDB に関するすべてのファイルを削除しました。そして、podfile を使用してプロジェクトに FMDB を追加すると、正常に機能しました。

于 2014-02-05T08:02:33.727 に答える