的应用程序委托中调用此函数
我正在尝试根据本教程(家事)
来设置使用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方法
只是为了确认;如果您要针对iOS 6或更高版本,则无需构建自己的SQLite即可获得FTS。
由于构建sqlite的构建不包括FTS模块,因此正在发生此错误。我尝试了另一种方法来克服它。我删除了有关SQLite和FMDB的所有文件。然后,我通过使用Podfile将FMDB添加到我的项目中,并成功地工作了。