Приложение зависает с обновлением запроса FMDB IOS

Мое приложение зависает при обновлении значения в базе данных. это код, который я использую, чтобы проверить, есть ли какие-либо изменения значения на сервере.

 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 ответ

Я исправил проблему, изменив функцию обновления в классе базы данных

 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

Другие вопросы по тегам