SWIFT 2的UITableView刷新Almofire
后,我知道almofire作品在后台线程,所以我把我的主类SWIFT 2的UITableView刷新Almofire
let nc = NSNotificationCenter.defaultCenter()
nc.addObserver(self, selector: "taskdataReadyFunc", name: "taskdataReady", object: nil)
,并在almofire结束后,我的数据类:
init() {
Alamofire.request(.GET, urlString, parameters: parameters).responseJSON { response in
if response.result.isSuccess {
let json = JSON(response.result.value!)
let data = json.arrayValue
self.tasks = data
print(self.tasks)
}
// print(self.tasks)
print(String(self.tasks.count)+"before nc")
let nc = NSNotificationCenter.defaultCenter()
nc.postNotificationName("taskdataReady", object: nil)
}
那导致泰德功能:
func taskdataReadyFunc(){
tableView.reloadData()
print("reload mision table" + String(taskDataClass.sharedInstance.tasks.count))
}
这工作得很好,当我开始首次应用。 我的问题是我做了一个新的任务,添加一个新的任务到数据库,然后尝试再次运行dataClass的init。在那个阶段,我可以看到来自数据库的新任务,但它不会使表重新载入数据(如果我关闭并打开应用程序,我会看到它) 如何刷新我的表视图或关闭并打开控制器从一开始?
sharedInstance只在您第一次调用它时创建一次。其名为singleTon。 这意味着如果init()函数填充类中的变量,则不会更新sharedInstance。
因此,在init类中,即使在第一次运行时更新sharedInstance而不是变量。 例如:
//self.tasks = data
taskDataClass.sharedInstance.tasks = data
我不知道你想与self.tasks = data
做什么,但在正常使用Alamofire与NSNotification
组合应该是这样的:
request(.GET, urlString, parameters: parameters).responseJSON { response in
guard let json = response.result.value else { return } // handle error
let notification = NSNotification(name: "taskDataReady", object: nil, userInfo: ["taskData" : json])
NSNotificationCenter.defaultCenter().postNotification(notification)
}
,那么你会解开的JSON来自通知的价值。我实际上建议将JSON解码为Alamofire完成处理程序中的实际类型,并将其封装在NSNotification
中,因此您无需在视图控制器中执行其他工作。
我确实使用了ns,因为我知道这个almofire可以作为踏面。这不是我的问题。我的问题是,当我再次运行almofire以获取新数据时,sharedInstans没有更新。我在这个阶段发布答案和解答:) –
通知不会自动转到主线程。尝试将'postNotificationName'或'reloadData'明确地分派给主线程/队列。 –
我试过了。奇怪的是,如果我在数据类中打印task.count我得到正确的数字,然后我去了NC函数和pront sharedInstance.tasks.count我得到旧号码。它就像任务的sharedInstance不更新一样。它是可行的吗? –
当你改变'self.tasks' **和**移到主队列时发送通知。 –