Когда мое приложение активно, и я получаю молчаливое уведомление от сервера, чтобы обновить мое табличное представление новыми данными, я вызываю следующую функцию, в которой я делаю запрос к серверу, чтобы принести последние данные, а затем перезагрузите эту конкретную строку.
func updateCell(path: Int, messageId: String) {
let indexPath = IndexPath(item: path, section: 0)
if let visibleIndexPaths = mainTableView.indexPathsForVisibleRows?.index(of: indexPath as IndexPath) {
if visibleIndexPaths != NSNotFound {
if let id = self.userData?.id {
let conversationID = String(describing: id)
ServerConnection.getSpecificMessage(conversationId: conversationID, messageId: messageId) { (dataMessage) in
if let message = dataMessage {
self.chat[path] = message
self.mainTableView.beginUpdates()
self.mainTableView.reloadRows(at: [indexPath], with: .fade)
self.mainTableView.endUpdates()
}
}
}
}
}
}
Моя проблема в том, что когда мое приложение находится на переднем плане, поток больше не работает из-за запроса API, который не может быть выполнен на переднем плане / фоне.
Журнал консоли показывает:
загрузка не удалась с ошибкой Ошибка Домен = NSPOSIXErrorDomain Код = 53 "Программное обеспечение вызвало прерывание соединения"
Я пытался изменить свою функцию с помощью
let state = UIApplication.shared.applicationState
if state == .background || state == .inactive {
NotificationCenter.default.addObserver(self, selector: #selector(self.reloadData(_:)), name: NSNotification.Name("BackgroundReload"), object: nil)
}
и разместил это уведомление "BackgroundRelod" в AppDelegate
func applicationWillEnterForeground (_ application: UIApplication)
но это всегда будет запускать мою функцию, даже если я не получал никаких уведомлений об обновлении интерфейса.