Обновление UITableView асинхронно после загрузки основных данных Swift

У меня есть UITableView, tViewNews

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

Он отлично работает

 func refresh(refreshControl: UIRefreshControl) { self.newsArray = [NewsItem]() self.newslists = [[NewsItem]]() self.getNewsFromServer() self.getNewsFromCoreData() self.tViewNews.reloadData() refreshControl.endRefreshing() } 

Теперь, когда пользователь сначала открывает news viewDidLoad() , я хотел бы, чтобы представление таблицы сначала загружалось из основных данных, а затем асинхронно заполняло мой массив табличных представлений с сервера (используя точно такой же метод, что и функция обновления), и затем перезагрузите представление таблицы.

Поэтому я попытался использовать следующий код в моей функции viewDidLoad() .

 override func viewDidLoad() { super.viewDidLoad() // Getting news from Core Data getNewsFromCoreData() // Updating core data from server and populating table view from core data dispatch_async(dispatch_get_main_queue()) { self.newsArray = [NewsItem]() self.newslists = [[NewsItem]]() self.getNewsFromServer() self.getNewsFromCoreData() self.tViewNews.reloadData() } 

Как вы можете видеть, функции, выполняемые внутри асинхронного запроса, идентичны функциям внутри функции обновления.

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

Кто-нибудь знает, почему это так?

EDIT – добавлены дополнительные функции

Получить основные данные

 func getNewsFromCoreData() { let temp = StaffCoreData() temp.getAllNews() newsDates = Dictionary<Int, [NewsItem]>() for newsobj in temp.newsArray{ if var curdate = newsDates[toNewsItem(newsobj).age]{ curdate.append(toNewsItem(newsobj)) newsDates[toNewsItem(newsobj).age] = curdate }else{ newsDates[toNewsItem(newsobj).age] = [toNewsItem(newsobj)] } } for var i = 0; i<50; ++i{if let curdate = newsDates[i]{newslists.append(curdate)}} 

Получить данные сервера

запускает экземпляр со следующим методом:

 func NewsCallReturnsWithSuccess(data: NSData) { if let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) { if let statusesArray = jsonObject as? NSArray{ newsArray.removeAll(keepCapacity: true) for item in statusesArray { let datacon : NSData = item.dataUsingEncoding(NSUTF8StringEncoding)! let jsonObject : NSDictionary! = NSJSONSerialization.JSONObjectWithData(datacon, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary let title : NSString = jsonObject.objectForKey("title") as! NSString let content : NSString = jsonObject.objectForKey("content") as! NSString let publishedby : NSString = jsonObject.objectForKey("publishedby") as! NSString let modified : NSString = jsonObject.objectForKey("modified") as! NSString let imageurl : NSString = jsonObject.objectForKey("imageurl") as! NSString let category : NSString = jsonObject.objectForKey("category") as! NSString let newsItem = NewsItem(title: title as String, content: content as String, category: category as String, imageURL: imageurl as String, publishedBy: publishedby as String, modified: modified as String) newsArray.append(newsItem) } //add complete array to CoreData let temp = StaffCoreData() temp.addArrayOfNew(newsArray) } } } 

One Solution collect form web for “Обновление UITableView асинхронно после загрузки основных данных Swift”

Когда вы используете другой поток для загрузки ваших данных, вы должны вернуться в основной поток, когда закончите загрузку, чтобы обновить интерфейс.

Подобно:

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { // load data dispatch_async(dispatch_get_main_queue()) { // update ui } } 

ОБНОВИТЬ

Pls покажет нам ваши getNewsFromCoreData() и getNewsFromServer() и, возможно, ваш cellForRowAtIndexPath .

 override func viewDidLoad() { super.viewDidLoad() dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { // load data self.newsArray = [NewsItem]() self.newslists = [[NewsItem]]() self.getNewsFromServer() self.getNewsFromCoreData() dispatch_async(dispatch_get_main_queue()) { // update ui self.tViewNews.reloadData() } } } 
  • фильтрация содержимого для UITableView
  • Как установить UITableView всегда в центр UIView?
  • Отключить прохождение заголовка плавающего раздела UITableView?
  • UITableViewCell не равен нулю
  • Невозможно остановить навигационную панель, закрывающую толкаемый вид - почему это происходит?
  • Изменить галочку в режиме редактирования UITableView?
  • В чем разница между deselectRowAtIndexPath и ячейкой setSelected?
  • Ячейка UITableView Imageview меняет свой размер на клик?
  • Создание UITableViewCell в XIB или в коде?
  • Внедрение карты Google с помощью UItableviewCell
  • как прокручивать uitableview и заголовок раздела в верхней части, видеть и прокручивать до
  • Interesting Posts

    Как навсегда отключить автокоррекцию в iOS Simulator?

    UIBlurEffect не работает при попытке сделать скриншот программно быстрым

    Как я могу хранить словарь с помощью RealmSwift?

    Проект Sketch 3 iOS не синхронизирован с фактическим дизайном

    MKMapView не обновляет изображение позиции пользователя

    Установка параметров реверберации AudioUnit?

    Как переопределить ClientBase.CreateChannel в моно на iOS

    iOS / Xcode: параллельные сборки для отладки, Ad Hoc и Release * w / In-App Purchase *

    iOS: заголовок заголовка iMessage и пользовательский интерфейс делителя

    GPUImage фильтрация видео

    Safari не будет загружать некоторые ресурсы через http / 2

    Возможно ли получить квитанцию ​​о доставке для удаленного Push-уведомления во время доставки?

    Ошибка kCFErrorDomainCFNetwork -1005 AFNetworking

    OpenGL ES сбой при перемещении фона, iOS 5.1

    Использовать собственный компас iOS в приложении

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.