我有後端發送通知消息到我的應用程序來通知用戶下載新的數據集。當用戶收到通知時,alertbox將在pushnotification線程中創建,並要求用戶接受或拒絕數據集下載。如果用戶接受下載,它將以異步方式下載數據。我想要做的是,我想在下載完成後刷新表格視圖。但我在不同的線程,我不知道如何更新該線程的tableview。我怎麼做?從另一個線程刷新UITableViewController
func downloadContent(key: String, pinOnCompletion: Bool) {
let manager = AWSUserFileManager.defaultUserFileManager()
let content = manager.contentWithKey(self.prefix + key)
content.downloadWithDownloadType(
.IfNewerExists,
pinOnCompletion: pinOnCompletion,
progressBlock: {[weak self](content: AWSContent?, progress: NSProgress?) -> Void in
guard self != nil else { return }
/* Show progress in UI. */
},
completionHandler: {[weak self](content: AWSContent?, data: NSData?, error: NSError?) -> Void in
guard self != nil else { return }
if let error = error {
print("Failed to download a content from a server. \(error)")
return
}
if let fileData = data {
// Saves Data to core data here
// Update the tableViewController
}
print("Object download complete.")
})
}
更新-1 這是不重複的帖子。建議的重複帖子詢問如何從tableviewcontroller類中的異步任務更新tableviewcontroller。我的問題是關於從不同類的另一個線程更新tableviewcontroller。
更新-2 只是爲了澄清,下載管理器類這裏面下載功能是從實現AmazonPushNotificationManager類調用。它在接收到推送通知時被調用。所以當我調用下載時,我不在UI線程中。我正在推送通知線程。如果我傳遞完成處理程序,這將來自pushnotification線程,而不是來自UI。我有兩個視圖(一個是tableview,另一個是UIViewController)。當收到推送通知時,用戶可以在任一個上。所以如果用戶在UIViewController上,我不應該重新加載表數據。我希望這聽起來不會令人困惑。
這是一樣的。另一個問題是關於從後臺線程更新主線程上的表。這是你問的同一件事。 – rmaddy
@rmaddy我不認爲它是重複的。當我開始下載時,我不再使用UI線程。從推送通知代理調用下載。它是推送通知委託的後臺線程,而不是UI線程的後臺線程。 – user30646
這就是爲什麼它是重複的。另一個問題是做同樣的事情 - 在後臺線程上運行一些代碼,並需要更新主線程上的UI。答案向你展示瞭如何從後臺線程更新主線程上的表。這正是你需要做的。 – rmaddy