Я просмотрел множество учебников и сообщений на эту тему, но я не могу получить разрешение на работу над моим проектом. По сути, я пытаюсь реализовать «pull to refresh» в моем TableView на iOS, который затем перезагружает некоторые данные через веб-сервер, а затем перезагружает таблицу с последним набором данных.Сложность Перезагрузка TableView In Swift
От тестирования кажется, что работает мое «pull to refresh», в котором я успешно могу извлечь последние данные из моего запроса веб-сервисов. Однако, как представляется, происходит сбой, поскольку ячейки таблицы фактически не обновляются с использованием последних данных. Вот что у меня в моем TableViewController;
import UIKit
class MinionsTableViewController: UITableViewController {
let minions: [Minion]
required init(coder aDecoder: NSCoder!) {
minions = Minion.fetchMinionData()
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
let defaults = NSUserDefaults(suiteName: "group.com.example.myapp.data")
NSKeyedArchiver.setClassName("Minion", forClass: Minion.self)
defaults?.setObject(NSKeyedArchiver.archivedDataWithRootObject(minions), forKey: "minions")
self.refreshControl?.addTarget(self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged)
}
func handleRefresh(refreshControl: UIRefreshControl) {
let minions: [Minion]
minions = Minion.fetchMinionData()
for minion in minions {
println(minion.now!)
}
self.tableView.reloadData()
refreshControl.endRefreshing()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return minions.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("minionCell", forIndexPath: indexPath) as! UITableViewCell
let minion = minions[indexPath.row]
if let name = minion.name {
cell.imageView?.image = UIImage(named: minion.name!)
cell.textLabel?.text = minion.name ?? "Minion"
cell.detailTextLabel?.text = "Data: \(minion.now!)"
} else {
cell.imageView?.image = UIImage(named: "Dave")
cell.textLabel?.text = "No data available."
cell.detailTextLabel?.text = "Sorry, nothing to present here!"
}
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowDetail" {
let indexPath = self.tableView.indexPathForSelectedRow()
//println(indexPath)
let minionDetail = minions[indexPath!.row]
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailedViewController
controller.detailItem = minionDetail
}
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let selectedIndexPath = self.tableView.indexPathForSelectedRow() {
self.tableView.deselectRowAtIndexPath(selectedIndexPath, animated: true)
}
}
}
My "minion.now!" переменная - это некоторые данные JSON с текущей меткой времени, и из моего вывода println я вижу, что она фактически обновляется, когда я пытаюсь обновить. Тем не менее, ячейки моей таблицы, похоже, не обновляются при каждом нажатии.
Любые мысли будут оценены наиболее высоко. Спасибо!
пусть это для констант используйте переменную var в переменной ячейки. –