Database Swift 2数据库路径问题

Database Swift 2数据库路径问题,database,sqlite,swift2,Database,Sqlite,Swift2,我正在学习在iOS应用程序开发过程中使用数据库的文本教程() 在以下代码中: databasePath = docsDir.stringByAppendingPathComponent("contacts.db") 出现一个错误: “stringByAppendingPathComponent”不可用:请改为在NSURL上使用URLByAppendingPathComponent 当我尝试这个建议时: databasePath = NSURL(fileURLWithPath:NSTe

我正在学习在iOS应用程序开发过程中使用数据库的文本教程()

在以下代码中:

     databasePath = docsDir.stringByAppendingPathComponent("contacts.db")
出现一个错误:

“stringByAppendingPathComponent”不可用:请改为在NSURL上使用URLByAppendingPathComponent

当我尝试这个建议时:

databasePath = NSURL(fileURLWithPath:NSTemporaryDirectory()).URLByAppendingPathComponent("contacts.db")
我意识到通过修改,我们现在使用的是URL而不是字符串,但我不知道还要对代码做什么其他更改

完整代码:

import UIKit
类ViewController:UIViewController{

@IBOutlet weak var name: UITextField!
@IBOutlet weak var address: UITextField!
@IBOutlet weak var phone: UITextField!
@IBOutlet weak var status: UILabel!

var databasePath = NSString()

override func viewDidLoad() {
    super.viewDidLoad()

    let filemgr = NSFileManager.defaultManager()
    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)

    let docsDir = dirPaths[0] as! String

    databasePath = docsDir.stringByAppendingPathComponent(
    "contacts.db")

    if !filemgr.fileExistsAtPath(databasePath as String) {

        let contactDB = FMDatabase(path: databasePath as String)

        if contactDB == nil {
            print("Error: \(contactDB.lastErrorMessage())")
        }

        if contactDB.open() {
            let sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"
            if !contactDB.executeStatements(sql_stmt) {
                print("Error: \(contactDB.lastErrorMessage())")
            }
            contactDB.close()
        } else {
            print("Error: \(contactDB.lastErrorMessage())")
        }
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func saveData(sender: AnyObject) {
    let contactDB = FMDatabase(path: databasePath as String)

    if contactDB.open() {

        let insertSQL = "INSERT INTO CONTACTS (name, address, phone) VALUES ('\(name.text)', '\(address.text)', '\(phone.text)')"

        let result = contactDB.executeUpdate(insertSQL,
            withArgumentsInArray: nil)

        if !result {
            status.text = "Failed to add contact"
            print("Error: \(contactDB.lastErrorMessage())")
        } else {
            status.text = "Contact Added"
            name.text = ""
            address.text = ""
            phone.text = ""
        }
    } else {
        print("Error: \(contactDB.lastErrorMessage())")
    }
}

@IBAction func findContact(sender: AnyObject) {
    let contactDB = FMDatabase(path: databasePath as String)

    if contactDB.open() {
        let querySQL = "SELECT address, phone FROM CONTACTS WHERE name = '\(name.text)'"

        let results:FMResultSet? = contactDB.executeQuery(querySQL,
            withArgumentsInArray: nil)

        if results?.next() == true {
            address.text = results?.stringForColumn("address")
            phone.text = results?.stringForColumn("phone")
            status.text = "Record Found"
        } else {
            status.text = "Record not found"
            address.text = ""
            phone.text = ""
        }
        contactDB.close()
    } else {
        print("Error: \(contactDB.lastErrorMessage())")
    }
}

}您是对的,
URLByAppendingPathComponent
返回一个
NSURL
,但是您可以始终使用
absoluteString
将路径作为
字符串来获取,并继续使用该字符串,就像您已经做的那样:

let databaseURL = NSURL(fileURLWithPath:NSTemporaryDirectory()).URLByAppendingPathComponent("contacts.db")
let databasePath = databaseURL.absoluteString
或者,您可以使用快捷方式直接构建数据库路径,而根本不使用
NSURL

let databasePath = NSTemporaryDirectory() + "database.db"