mardi 22 décembre 2015

Swift 2 Database Path Issues

I am following a text tutorial for using databases during iOS app development (http://ift.tt/1JK1SAB)

In the following piece of code:

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

An error comes up:

'stringByAppendingPathComponent' is unavailable: Use URLByAppendingPathComponent on NSURL instead.

When I try the suggestion:

databasePath = NSURL(fileURLWithPath:NSTemporaryDirectory()).URLByAppendingPathComponent("contacts.db")

I realize that by making the modification, we are now working with URL's instead of strings, but I don't know what other changes to make to the code

Full code:

import UIKit

class 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())")
    }
}

}

Aucun commentaire:

Enregistrer un commentaire