2016-02-26 86 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

相关问题