2014-01-24 84 views
0

我需要对下列问题的一些提醒:删除对象NSFetchedResultsController

我使用的是iOS主从应用程序模板为我的应用程序,我遇到问题时,我从主原因请看详细信息页面。 我的问题是为什么NSFetchedResultsChangeDelete在继续时被触发?

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject 
     atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)newIndexPath 
{ 
    UITableView *tableView = self.tableView; 
    List *list = nil; 

    switch(type) { 
     case NSFetchedResultsChangeInsert: 
      [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 

     case NSFetchedResultsChangeDelete: 

       [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

      break; 

     case NSFetchedResultsChangeUpdate: 
      [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath]; 
      break; 

     case NSFetchedResultsChangeMove: 
      [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 
    } 
} 

但在我的情况,我想,当用户通过从右我还从服务器中删除对象刷卡表格单元格中删除对象做到以下几点,即,这个效果很好,当有一个表视图并没有segueing 。如果我阻止NSFetchResutlsController表单删除对象,当我继续细节如下,然后从细节回来后查看表视图单元格不响应我的点击事件。即表格不会延续,点击时没有任何反应,

任何人都可以引导这里出了什么问题吗?我应该如何正确实现这个功能?

case NSFetchedResultsChangeDelete: 
      list = (List*)anObject; 
      BOOL visible = [self.navigationController.topViewController isKindOfClass:[RKGMasterViewController class]]; 

      if(list.listSyncStatus == [NSNumber numberWithInt:1] && visible) 
      { 
       [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
       [self deleteDataFromServer:list]; 
      } 

回答

2

好的,第一件事。 NSFetchedResultsController不会删除任何东西。它根本不会对数据存储进行任何更新。它所做的就是获取对象并观察变化。

听起来好像你在将tableview删除行与数据存储中的某些东西删除混淆。

你不应该改变NSFetchedResultControllerDelegate方法来做更多的事情而不是更新表格。

但是,当用户滑动单元格并点击Delete时,您应该在后台线程上从核心数据存储中删除相关数据。您也应该(作为此过程的一部分)发送请求以从服务器删除数据。

如果您在background thread(和后台上下文)上执行了删除操作,NSFRC将接收更改并从您的表格中删除单元格。

+0

好的,当用户滑动表格单元格时触发表格视图的事件? – Umair

+0

当用户滑动表格视图时,会出现一个删除按钮。没有其他的。如果用户点击删除按钮,那么它将在tableViewDelegate中运行一个名为'tableView:commitEditingStyle:forRowAtIndexPath:'的函数。在这里,您应该删除核心数据实体并向服务器发送调用以删除相同的对象。 – Fogmeister

+0

好吧,我已经完成了你所说的话,我的一半问题已经解决。现在剩下的问题是,当我点击单元格塞格细节视图,并返回到主视图后,该项目不存在,因为NSFetchResults控制器的didChangeObject方法 [tableView deleteRowsAtIndexPaths:@ [indexPath] withRowAnimation:UITableViewRowAnimationFade]; 行在执行时执行,我该如何解决这个问题? – Umair