我在我的應用程序中使用核心數據,並使用它NSFetchedResultsController
在表格視圖中使用它。我可以對單元格/數據執行各種操作,例如向左或向右滑動以刪除或將單元格分別標記爲已讀(這也會刪除數據)。如何在每次更改NSFetchedResultsController中對應於單元格的對象時更新我的單元格?
在我說的情況下,標記細胞爲已讀(其中還設置相應的核心數據對象的isRead
屬性YES
),我想要的細胞更新視覺來表明這一點。視覺更新讓電池看起來更加美觀(例如讀取與未讀電子郵件的外觀)。
我該如何發生這種情況? (更新單元格時對應於它的對象具有屬性變化,即。)
我在此委託方法嘗試了NSFetchedResultsController
:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:(ArticleCell *)[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
而NSFetchedResultsChangeUpdate
是被選中的情況下,使然後configureCell:
被調用時,它看起來像這樣:
- (void)configureCell:(ArticleCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
Article *article = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.article = article;
}
它調用我的UITableViewCell
子類,ArticleCell
的定製article
的屬性設置。在這種方法我基本上開始了與:
- (void)setArticle:(Article *)article {
if (_article != article) {
比較被設置爲現有的每一個用於小區(所以如果有變化,只更新)的新文章。但是,這個if語句中的代碼永遠不會被調用!它跳過去並存在該方法。內if語句我所有的自定義代碼來設置基於該文章的性質是什麼細胞樣子(isRead
,kind
等)
我應該如何處理被這個?我只是希望每當更新對應於該單元格的對象時,單元格都會反映更新。無論是閱讀狀態的改變,還是其他。
如何僅更改需要在set方法中更改的部分?或者我從頭開始設置它,好像它是一個新的單元格?這是一個很大的性能損失? –
我不相信將單元格設置爲新的(例如,不檢查所有值而取代)是一個巨大的性能損失,因爲它只會以用戶可以與可見單元格交互的速度發生。但是,當然,這取決於您的模型以及您希望在單元格中顯示的數據類型/數量。 –