应用冻结FMDB查询更新ios

时间:2018-01-24 22:41:59

标签: ios database sqlite fmdb

当我更新数据库中的值时,我的应用程序会冻结。这是我用来检查服务器中是否有任何值更改的代码。

 DataService.ds.REF_POSTS.observe(.childChanged, with: { (snapshot) in

        let postDict = snapshot.value as? Dictionary<String, AnyObject>
        self.db.updateBook(bookName: postDict!["book_name"] as! String, id: postDict!["id"] as! String)
        self.arrayBooks.removeAll()
        self.arrayBooks.append(contentsOf: self.db.fetchAll())
        self.collectionView.reloadData()
    })

这是具有updateBook函数的数据库类

  func updateBook (bookName : String , id: String) {
        let sqlString = "UPDATE magazine SET book_name='\(bookName)' WHERE id='\(id)'"
        if self.fmdb.executeUpdate(sqlString, withArgumentsIn: []) {            
        }
    }

当应用程序冻结时,我按下xcode中的暂停以查看我得到的错误。 错误是:

[FMDatabase executeUpdate:error:withArgumentsInArray:orVAList:]

[FMDatabase executeUpdate:withArgumentsInArray:]

updateBook(bookName:id:)

closure #2 in controller.viewDidLoad()

1 个答案:

答案 0 :(得分:0)

我通过更改数据库类

中的更新功能来解决问题
 func updateBook (bookName : String , id: String) {

        DispatchQueue.main.async {


        let sqlString = "UPDATE magazine SET book_name='\(bookName)' WHERE id='\(id)'"

        if self.fmdb.executeUpdate(sqlString, withArgumentsIn: [bookName,id]) {

            print("sql string  \(sqlString)")
        }
             }

    }

所以基本上更新将在主线程DispatchQueue.main.async