2016-02-26 134 views
0

我正在從正在返回消息對象的後端服務中獲取數據,並且想要在表視圖中顯示消息。我遇到的問題是重新加載視圖和數據到達之間的延遲。目前只要用戶滾動表格視圖就會顯示消息。在表視圖中顯示來自後端服務的數據

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("Message view did load") 
    username = preferences.valueForKey("username") as! String 
    userID = preferences.valueForKey("userID") as! String 

    // Do any additional setup after loading the view. 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None 
    self.tableView.rowHeight = UITableViewAutomaticDimension 

    getUser() 
} 

func getUser(){ 
    let currentUserAccessToken = EVUser.currentUser().accessToken 
    EVUser.fetchWithAccessToken(currentUserAccessToken, block: { (loggedInUser:EVUser!, error:NSError!) -> Void in 
     if (error == nil) { 
      self.user = loggedInUser 
      self.getMessages() 
      print("The user " + loggedInUser.username + " is logged in with valid access token.") 
     } else { 
      print("The user is not logged in: " + error.domain) 
     } 
    }) 

} 

func getMessages(){ 

    let dataStore: EVDataStore = EVDataStore.sharedInstance() as! EVDataStore 

    //Filter item 
    let request:EVFetchRequest = EVFetchRequest(kindOfClass: Message.self) 

    request.predicate = NSPredicate(
     format: "CreatedByName == %@ OR (To == %@ AND CreatedByName == %@)", 
     username, 
     userID, 
     "Admin" 
    ) 
    dataStore.executeFetchRequest(request, block: { (result, error) -> Void in 
     if error == nil{ 
      if result?.count > 0 { 

       for item in result{ 
        print (item) 
        self.globalMessages.append(item as! Message) 
       } 
       self.displayMessages(self.globalMessages) 

      }else{ 
       print("No items found") 
      } 
     }else{ 
      print("Error: \(error)") 
     } 
    }) 
} 


func displayMessages(messages:[Message]){ 
    setupTableView() 
} 


func setupTableView(){ 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
} 

是否有一種方法可以在消息一到達時將消息添加到表視圖中?

+1

我不知道我的理解是否正確,但也許調用tableView.reloadData()解決了你的問題。 – ammerzon

+0

@ammerzon謝謝你的訣竅 – Lonergan6275

+0

我會寫一個答案,以便您可以將其標記爲正確 – ammerzon

回答

1

您有多個選項可以執行此操作。以太你重新加載整個表格視圖或插入一行。

重裝表視圖

tableView.reloadData() 

插入一行

tableView.beginUpdates() 
tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: {your message array}.count-1, inSection: 0)], withRowAnimation: .Automatic) 
tableView.endUpdates() 

欲瞭解更多信息,請看這裏:Insert new cell into UITableView

相關問題