2013-12-13 52 views
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被稱爲具有良好的indexPathtableView末更新,它再次調用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) 

任何想法?

回答

0

爲什麼更新coreDatadidEndDisplayingCell? 致電[Feed save],那麼您的tableview將開始再次更新,而tableView將調用didEndDisplayingCell,因爲您重新加載了剛更新的那一行。

所以把代碼放在didEndDisplayingCell方法的其他地方。

+0

我想更新單元格以更改其狀態以進行讀取,但是我希望在tableView結束顯示單元格時執行此操作。您滾動,當單元格不在屏幕上時,它將更新爲讀取狀態。 我在哪裏可以將代碼從didEndDisplayingCell中移出? – romsi

+0

我認爲你正在做一個像Feedly這樣的應用程序,所以tableView單元格可能會顯示Feed的標題。所以當用戶點擊單元格時,你按下'view controller'來顯示細節。如果是這樣,爲什麼不在顯示細節時更新讀狀態,並讓NSFetchedResultsController在返回此頁面時處理其他事情。 – johnMa

+0

我明白你的意思,就像你說的我想做一個像餵食一樣的應用程序。此時,我想在用戶滾動時更新我的​​供稿。 Feedly有點不同,因爲Feedly的頁面不是表格視圖。當您滾動到下一頁時,feedly update會自動提供以讀取狀態。我想在單元格不在屏幕時自動更新我的提要。 – romsi

相關問題