我想在CollectionViewController中使用NSFetchedResultsControllerRelegate。 因此我只是改變了CollectionView的TableViewController方法。NSFetchedResultsContollerDelegate CollectionView
(void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
switch(type) {
case NSFetchedResultsChangeInsert:
[self.collectionView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]];
break;
case NSFetchedResultsChangeDelete:
[self.collectionView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] ];
break;
}
}
(void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
UICollectionView *collectionView = self.collectionView;
switch(type) {
case NSFetchedResultsChangeInsert:
[collectionView insertItemsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]];
break;
case NSFetchedResultsChangeDelete:
[collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
break;
case NSFetchedResultsChangeUpdate:
[collectionView reloadItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
break;
case NSFetchedResultsChangeMove:
[collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
[collectionView insertItemsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]];
break;
}
}
(void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.collectionView reloadData];
}
但我不知道如何處理WillChangeContent
(beginUpdates
爲TableView
)和DidChangeContent
(endUpdates
爲TableVie
w)的CollectionView
。
一切工作正常,除非我將一個項目從一個部分移動到另一個部分。然後我得到以下錯誤。
這通常是NSManagedObjectContextObjectsDidChangeNotification觀察者中的一個錯誤。無效的更新:第0部分中的項目數量無效。...
任何想法如何解決此問題?
謝謝,馬丁。我之前沒有采取這種解決方法嘗試這種方式 - 沒有看到該解決方案的更新。現在,解決集合視圖中的錯誤終於可以奏效了。由於我有頁眉和頁腳這是一個非常好的幫助。不過,我希望這個bug能夠解決一次。 – aquarius68
@ aquarius68:這不是一個真正的bug。問題是FRC委託方法和集合視圖更新方法並不真正合在一起。修復這將意味着更改或擴展其中一個API。 - 但我很高興你的工作。 –
我不再收到錯誤消息,但它尚未完全工作;即如果用戶添加它的第一個元素,但是如果用戶添加第二個元素,則只有當我返回包含與集合視圖的對象相關的對象的表視圖時才起作用。 – aquarius68