【问题标题】:Displaying data from back end service in table view在表格视图中显示来自后端服务的数据
【发布时间】:2016-06-09 22:10:12
【问题描述】:

我正在从返回消息对象的后端服务中获取数据,并且我想在表格视图中显示这些消息。我遇到的问题是视图加载和数据到达之间存在延迟。目前,只要用户滚动表格视图,就会显示消息。

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;
}

有没有办法在消息到达后立即将它们添加到表格视图中?

【问题讨论】:

  • 我不确定我是否理解正确,但也许调用 tableView.reloadData() 可以解决您的问题。
  • @ammerzon 谢谢你成功了
  • 我会写一个答案,以便您将其标记为正确

标签: swift telerik backend mbaas


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多