我在用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 */
);

10-06 01:49