Отображение данных из серверной службы в табличном представлении
Я получаю данные из серверной службы, которая возвращает объекты сообщений, и я хочу отображать сообщения в виде таблицы. проблема, с которой я столкнулся, заключается в задержке между загрузкой представления и получением данных. в настоящее время сообщения отображаются, как только пользователь прокручивает представление таблицы.
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 ответ
Решение
У вас есть несколько вариантов сделать это. Ether вы перезагружаете всю таблицу или вставляете одну строку.
Перезагрузка таблицы
tableView.reloadData()
Вставить строку
tableView.beginUpdates()
tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: {your message array}.count-1, inSection: 0)], withRowAnimation: .Automatic)
tableView.endUpdates()
Для получения дополнительной информации смотрите здесь: Вставьте новую ячейку в UITableView