我有一个显示UICollectionView
内容的NSFetchedResultsController
。 collectionView有一个部分,在该部分中有一个标题。标头允许用户过滤集合视图中的内容。标题视图的委托连接到包含集合视图的UIViewController
。
只要用户更改了其中一个过滤器选项,标题视图就会向其委托发出消息。委托更改其fetchRequest
的{{1}}上的谓词,并调用NSFetchedResultsController
。接下来,必须通知集合视图内容已更改。这可以通过多种方式完成,但我喜欢的方式是调用-[NSFetchedResultsController performFetch:]
。不幸的是,这种方法不能像预期的那样工作:当我调用这个方法时,整个集合视图就会消失。以下是我就此问题所做的一些观察:
-[UICollectionView reloadData]
标记设置为hidden
。我试图通过在YES
上设置符号断点来跟踪导致此问题的方法。不幸的是,它永远不会在-[UIView setHidden:]
子视图中破坏。UICollectionView
后,collectionView:cellForItemAtIndexPath:
永远不会被调用。-[UICollectionView reloadData]
后,collectionView:viewForSupplementaryElementOfKind:atIndexPath:
永远不会被调用。-[UICollectionView reloadData]
并仍然返回正确的数字(在这种情况下为1)。numberOfSectionsInCollectionView:
并仍然返回正确的数字(在这种情况下为1)。到目前为止,我一直试图解决这个问题:
collectionView:numberOfItemsInSection
实例sectionInset
,itemSize
)
UICollectionViewFlowLayout
实例separatorInset
)
UICollectionView
并相应地设置UICollectionView
。不幸的是contentInset
不喜欢我用它的自动布局限制和发生崩溃时发脾气。UICollectionView
而非[UICollectionView reloadSections:]
。这有效,但我不喜欢动画。[UICollectionView reloadData]
中的断言失败而崩溃。以这种方式设置标头感觉不对,但遗憾的是-[UICollectionView dealloc]
没有像UICollectionView
(UITableView
)这样的全局标头。
答案 0 :(得分:5)
尝试在主线程中重新加载它们
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
它对我有用