CollectionView realoadData索引超出范围

时间:2017-02-13 11:51:34

标签: ios multithreading core-data uicollectionview

我尝试从coreData获取一些数据并将其显示在collectionView中。很基本的。我在后台线程上执行此操作,然后在main上调用reloadData,如图中所示。

但问题是,有时候它会起作用,有时它不起作用,让我的指数超出范围。我观察到当它崩溃时它会进入一些委托方法的集合视图,而不是viewWillAppear

How I call it from ViewWillAppear Fetching data

修改:Here Is the code

3 个答案:

答案 0 :(得分:0)

您可能遇到多个问题。但是,第一个是你没有初始化数据容器。将在viewWillAppear之前调用collectionView委托方法。尝试在viewDidLoad

中初始化容器
thumbnailsForSections = [String:[Thumbnails]]()

答案 1 :(得分:0)

核心数据不是线程安全的。您无法存储从后台线程检索到的NSManagedObjects并在主线程中使用它们。

考虑在主线程上进行提取或使用NSFetchedResultsController。即使对于大量数据,这也不应该在正常情况下花费很长时间。如果需要花费很长时间,请仔细查看数据模型或谓词。

如果想继续使用后台线程,则必须将NSManagedObject中存储的值复制到不同的线程安全对象(即自定义NSObject子类或字典)。

答案 2 :(得分:0)

伙计们,感谢您的麻烦,但我设法获得了我想要的东西。

我没有解决背景问题而是取消了它。我想要获得的是从CoreData加载数据时播放的活动指示器。

通过消除它运行的队列,这是非常合乎逻辑的,我认为因为我在主线程上启动动画并在加载整个数据后停止它。所以似乎主线“可以同时做两件事”? :)