您好我试图在NSFetchedResultsController的委托函数中修改UICollectionView的单元格
controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
通过dequeueReusableCell(withReuseIdentifier:for :)函数。但它总是返回零。所以我不得不使用cellForItemAtIndexPath函数。但是为什么dequeueReusableCell返回nil。当然我之前已经注册了课程。
collectionView?.register(MessageCell.self, forCellWithReuseIdentifier: cellId)
这是代码:
if type == .update {
print("UPDATE")
blockOperations.append(BlockOperation(block: {
let cell = self.collectionView?.cellForItem(at: indexPath!)
as! MessageCell
// let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: self.cellId, for: indexPath!) returns nil. why?
let friend = self.fetchedResultsController.object(at: indexPath!) as! Friend
cell.message = friend.lastMessage
}))
}
答案 0 :(得分:1)
首先,您实际需要cellForItem
,其次,如果目前可见,则会返回一个单元格
collec.cellForItem(at: NSIndexPath.init(row: 0, section: 0 ) as IndexPath)
答案 1 :(得分:0)
您不得在cellForRowAtIndexPath
之外修改UICollectionView的单元格,在NSFetchedResultsController
的委托功能中编辑您的基础data model
并致电reloadData
或reloadRowsAtIndexPaths
。< / p>
dequeueReusableCellWithIdentifier
必须仅在cellForRowAtIndexPath
内使用。