0
我嘗試創建聚合提要的應用程序。如何在tableview結束顯示單元格時更改爲讀取狀態?
我想在表視圖結束顯示單元格時更改提要狀態。
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
Feed* feed = [_fetchedResultsController objectAtIndexPath:indexPath];
if ([feed.read boolValue] == YES) return ;
feed.read = [NSNumber numberWithBool:YES];
[Feed save];
}
我使用NSFetchedResultsController,當我改變飼料狀態時,我使用reloadRowsAtIndexPath。
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
{
switch(type) {
...
case NSFetchedResultsChangeUpdate:
[self.tableView reloadRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
break;
...
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
我滾動,didEndDisplayingCell
被稱爲具有良好的indexPath
當tableView
末更新,它再次調用didEndDisplayingCell
下一個indexPath
。之後,我發現核心數據存在嚴重錯誤。
CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. *** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2] with userInfo (null)
任何想法?
我想更新單元格以更改其狀態以進行讀取,但是我希望在tableView結束顯示單元格時執行此操作。您滾動,當單元格不在屏幕上時,它將更新爲讀取狀態。 我在哪裏可以將代碼從didEndDisplayingCell中移出? – romsi
我認爲你正在做一個像Feedly這樣的應用程序,所以tableView單元格可能會顯示Feed的標題。所以當用戶點擊單元格時,你按下'view controller'來顯示細節。如果是這樣,爲什麼不在顯示細節時更新讀狀態,並讓NSFetchedResultsController在返回此頁面時處理其他事情。 – johnMa
我明白你的意思,就像你說的我想做一個像餵食一樣的應用程序。此時,我想在用戶滾動時更新我的供稿。 Feedly有點不同,因爲Feedly的頁面不是表格視圖。當您滾動到下一頁時,feedly update會自動提供以讀取狀態。我想在單元格不在屏幕時自動更新我的提要。 – romsi