SWIFT 2的UITableView刷新Almofire

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。在那个阶段,我可以看到来自数据库的新任务,但它不会使表重新载入数据(如果我关闭并打开应用程序,我会看到它) 如何刷新我的表视图或关闭并打开控制器从一开始?

+0

通知不会自动转到主线程。尝试将'postNotificationName'或'reloadData'明确地分派给主线程/队列。 –

+0

我试过了。奇怪的是,如果我在数据类中打印task.count我得到正确的数字,然后我去了NC函数和pront sharedInstance.tasks.count我得到旧号码。它就像任务的sharedInstance不更新一样。它是可行的吗? –

+0

当你改变'self.tasks' **和**移到主队列时发送通知。 –

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中,因此您无需在视图控制器中执行其他工作。

+0

我确实使用了ns,因为我知道这个almofire可以作为踏面。这不是我的问题。我的问题是,当我再次运行almofire以获取新数据时,sharedInstans没有更新。我在这个阶段发布答案和解答:) –