Отображение данных из серверной службы в виде таблицы

Я извлекаю данные из серверной службы, которая возвращает объекты сообщений, и я хочу отображать сообщения в виде таблицы. проблема, с которой я сталкиваюсь, заключается в задержке между загрузкой представления и получением данных. в настоящее время сообщения отображаются, как только пользователь прокручивает представление таблицы.

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

Есть ли способ добавить сообщения в табличное представление, как только они поступят?


person Lonergan6275    schedule 26.02.2016    source источник
comment
Я не уверен, правильно ли я вас понял, но, возможно, вызов tableView.reloadData() решит вашу проблему.   -  person ammerzon    schedule 26.02.2016
comment
@ammerzon Спасибо, что сделали свое дело   -  person Lonergan6275    schedule 26.02.2016
comment
Я напишу ответ, чтобы вы могли отметить его как правильный   -  person ammerzon    schedule 26.02.2016


Ответы (1)


У вас есть несколько вариантов сделать это. Либо вы перезагружаете все табличное представление, либо вставляете одну строку.

Перезагрузка представления таблицы

tableView.reloadData()

Вставить строку

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

Для получения дополнительной информации см. здесь: Вставить новую ячейку в UITableView

person ammerzon    schedule 26.02.2016