table view.reloadData() обновляет представление таблицы после того, как я меняю контроллер представления, и я возвращаюсь. Я добавляю функциональность для обновления:table view.reloadData() не работает в представлении таблицы
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged)
refreshControl.backgroundColor = UIColor.purpleColor()
// dispatch_async(dispatch_get_main_queue(), {() -> Void in
// self.tableView.reloadData()
// })
return refreshControl
}()
это вне любых методов. Тогда в viewdidload():
override func viewDidLoad() {
self.tableView.addSubview(self.refreshControl)
}
Функция handleRefresh заключается в следующем:
func handleRefresh(refreshControl: UIRefreshControl) {
// Do some reloading of data and update the table view's data source
// Fetch more objects from a web service, for example...
fetch() // Fetches new data
refreshControl.endRefreshing()
self.tableView.reloadData()
}
Это работает, но только после того, как я выйти из контроллера просмотра и вернуться обратно. Я думаю, проблема заключается в том, что массив, который использует для заполнения ячеек таблицы, является глобальным массивом, что означает, что он объявлен в той же области, что и операторы импорта, но я не уверен. Мне бы хотелось, чтобы некоторые советы о том, как заставить pull обновить «обновить» представление таблицы, как только оно будет вытащено.
Это мой выборки код:
func fetch(){
var query = PFQuery(className:"Photo")
query.whereKey("friend", equalTo:"bob")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
// The find succeeded.
self.getImageData(objects as [PFObject])
if let objects = objects as? [PFObject] {
PhotoInfoArray = objects // This is the global array that stores photo information, date created, etc.
}
} else {
println("Error: \(error!) \(error!.userInfo!)")
}
}
}
func getImageData(objects: [PFObject]) {
for object in objects {
let thumbNail = object["Image"] as PFFile
thumbNail.getDataInBackgroundWithBlock({
(imageData: NSData!, error: NSError!) -> Void in
if (error == nil) {
let image = UIImage(data:imageData)
//image object implementation
imageArray.append(image!)// this is the global array that stores the actual pictures
// println(image)
}
})//getDataInBackgroundWithBlock - end
}//for - end
}
Эти функции используют Синтаксический анализ в качестве внутреннего интерфейса.
Ваш вызов выборки, скорее всего, ASync так, когда ваш код попадает reloadData данные не получил еще. Ваш текущий код зависит от синхронного выполнения. Таким образом, вы хотите выполнить вызов reloadData в обратном вызове (или делегировать метод) вашего запроса на выборку. Возможно, посмотрите на блоки, которые идеально подходят для такого рода вещей. – tafh
uhhh Я подразумеваю закрытие конечно (блоки Objective-C;)) – tafh
Спасибо, что ответили. Что означает «асинхронный»? –