0

我想加载一些已经存储在 Core Data 中的天气数据。显然,我希望集合视图在加载数据后自行更新。有人可以告诉我,为什么这段代码不起作用?

let context = PersistanceService.context
let fetchRequest: NSFetchRequest<Weather> = Weather.fetchRequest()
let queue = DispatchQueue(label: "loadanddisplay")
queue.sync {
    do {
        let result = try context.fetch(fetchRequest)
        self.weatherArray = result
        self.collectionView?.reloadData()

    } catch let err { print(err) }
}  

当我在此功能执行后手动重新加载数据时,它会显示出来。

4

2 回答 2

0

下面的代码块在后台线程上执行

queue.sync {}

并且集合视图是主线程的一部分,或者 UI 必须仅从线程处理/更新。

您可以尝试以下方法来重新加载集合视图:

DispatchQueue.main.async { // async OR sync as you want
        self.collectionView?.reloadData()
    }
于 2018-08-23T15:29:45.380 回答
0

这在这里为我完成了工作:

DispatchQueue.global(qos: .background).async {
    let context = PersistanceService.context
    let fetchRequest: NSFetchRequest<Weather> = Weather.fetchRequest()
    do {
        let result = try context.fetch(fetchRequest)
        self.weatherArray = result
    } catch let err { print(err) }

    DispatchQueue.main.async {
        self.pageControl.numberOfPages = self.weatherArray.count
        self.collectionView?.reloadData()
    }
}

只要确保你正确调用它。我必须准备好了解 GCD 的工作原理才能得到它。

于 2018-08-24T09:39:48.473 回答