2016-04-26 81 views
-1

後,我知道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' **和**移到主隊列時發送通知。 –

回答

-1

sharedInstance只在您第一次調用它時創建一次。其名爲singleTon。 這意味着如果init()函數填充類中的變量,則不會更新sharedInstance。

因此,在init類中,即使在第一次運行時更新sharedInstance而不是變量。 例如:

//self.tasks = data 

taskDataClass.sharedInstance.tasks = data 
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來自通知的價值。我實際上建議將JSON解碼爲Alamofire完成處理程序中的實際類型,並將其封裝在NSNotification中,因此您無需在視圖控制器中執行其他工作。

+0

我確實使用了ns,因爲我知道這個almofire可以作爲踏面。這不是我的問題。我的問題是,當我再次運行almofire以獲取新數據時,sharedInstans沒有更新。我在這個階段發佈答案和解答:) –