我尝试从coreData获取一些数据并将其显示在collectionView中。很基本的。我在后台线程上执行此操作,然后在main上调用reloadData,如图中所示。
但问题是,有时候它会起作用,有时它不起作用,让我的指数超出范围。我观察到当它崩溃时它会进入一些委托方法的集合视图,而不是viewWillAppear
答案 0 :(得分:0)
您可能遇到多个问题。但是,第一个是你没有初始化数据容器。将在viewWillAppear之前调用collectionView
委托方法。尝试在viewDidLoad
:
thumbnailsForSections = [String:[Thumbnails]]()
答案 1 :(得分:0)
核心数据不是线程安全的。您无法存储从后台线程检索到的NSManagedObjects
并在主线程中使用它们。
考虑在主线程上进行提取或使用NSFetchedResultsController
。即使对于大量数据,这也不应该在正常情况下花费很长时间。如果需要花费很长时间,请仔细查看数据模型或谓词。
如果想继续使用后台线程,则必须将NSManagedObject
中存储的值复制到不同的线程安全对象(即自定义NSObject
子类或字典)。
答案 2 :(得分:0)
伙计们,感谢您的麻烦,但我设法获得了我想要的东西。
我没有解决背景问题而是取消了它。我想要获得的是从CoreData加载数据时播放的活动指示器。
通过消除它运行的队列,这是非常合乎逻辑的,我认为因为我在主线程上启动动画并在加载整个数据后停止它。所以似乎主线“可以同时做两件事”? :)