当我在swift playground中运行以下代码时,它返回成功。当我将它复制到我的Xcode项目时,它返回失败。我认为它与路径有关,所以我用Google搜索并尝试了path.cString(使用:String.Encoding.utf8),但仍然没有运气。我不明白的是它为什么在游乐场工作,而不是在应用程序本身。
var db: OpaquePointer? = nil;
let path:String="/Users/williamstorey/Documents/db182.db"
if sqlite3_open(path ,&db) == SQLITE_OK {
print("SUCCESS")
} else {
print("FAILURE");
}
答案 0 :(得分:2)
您不应只检查它是否为SQLITE_OK
,而是保存返回代码并检查返回的值,如果它不是SQLITE_OK
。如果你不查看实际的返回代码值,你只是猜测问题可能是什么。
但最可能的问题是你的应用程序是沙箱,不能只在那里打开文件。您应该动态构建URL,然后您将获得一个安全的文件URL /路径:
let fileURL = try! FileManager.default
.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
.appendingPathComponent("db182.db")
print(fileURL.path)
let returnCode = sqlite3_open(fileURL.path, &db)
这将导致类似:
/Users/williamstorey/Library/Containers/com.domain.MyApp/Data/Documents/db182.db
坦率地说,您可能希望使用.applicationSupportDirectory
而不是.documentDirectory
。见File System Programming Guide: The Library Directory Stores App-Specific Files。另请参阅About App Sandbox。