我在用Objective-C挣扎...似乎无法获得它与C#之间的区别...无论如何,我有以下代码,这给了我一个构建错误
NSString* databasePath = @"some string";
if (sqlite3_open(databasePath, &db) == SQLITE_OK) {
}
在
sqlite3_open
行上,出现以下编译器错误:从不兼容的指针类型传递'sqlite_open'的参数1
最佳答案
在这种情况下,除了链接器错误(根据@JeremyP提供的答案,您需要将libsqlite3.dylib添加到您的项目中)之外,sqlite3_open
命令还需要一个常量字符指针,可以从您拥有的NSString中创建该指针。如下:
// Get the path to the database file
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [searchPaths objectAtIndex:0];
NSString *databasePath = [documentPath stringByAppendingPathComponent:@"ppcipher.s3db"];
// Open the database file
const char *cDatabasePath = [databasePath cStringUsingEncoding:NSUTF8StringEncoding];
sqlite3_open(cDatabasePath, &database);
如果查看SQLite documentation,通常可以看到预期的结果。例如:
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);