我知道almofire在背景中作为一个线程工作,所以我放入了我的主要课程
let nc = NSNotificationCenter.defaultCenter()
nc.addObserver(self, selector: "taskdataReadyFunc", name: "taskdataReady", object: nil)
并在almofire完成后的dataClass中:
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。在那个阶段,我可以看到来自数据库的新任务,但它没有使表重新加载数据。(如果我关闭并打开应用程序,我看到它) 如何刷新我的表格视图,或者从一开始就关闭并打开控制器?
答案 0 :(得分:0)
我不确定您要对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值。我实际上建议将ASON解码为Alamofire完成处理程序中的实际类型并将其封装在NSNotification
中,这样您就不必在视图控制器中执行其他工作。
答案 1 :(得分:-1)
首次调用sharedInstance时,只创建一次。 它叫做singleTon。 这意味着如果init()函数填充类中的变量,则sharedInstance将不会更新。
所以,在init类中,即使在第一次运行时也更新sharedInstance而不是变量。 例如:
//self.tasks = data
taskDataClass.sharedInstance.tasks = data