2013-05-06 55 views
3

我有一個通過NSFetchedResultsController填充的UITableView。當用戶滑動一個項目的權利我有出現,讓他/她可以用下面的方法刪除對象刪除按鈕:使用NSFetchedResultsController從UITableView中刪除

// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
// Return NO if you do not want the specified item to be editable. 
    return YES; 
} 

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { 
    return YES; 
} 


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

if (editingStyle == UITableViewCellEditingStyleDelete) { 
    //perform similar delete action as above but for one cell 

    XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 

    NSLog(@"User delete: %@", [user displayName]); 

    //delete from fetchController 
    NSArray *sections = [[self fetchedResultsController] sections]; 
    int userStatus = [[user sectionNum] intValue]; 


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

    } 
} 

但是,當我這樣做,有一個例外,因爲我沒有更新該模型是我的fetchedResultsController。問題是如何使用我從commitEditingStyle獲得的indexPath從fetchedController中移除?

回答

7

由於您使用的是NSFetchedResultsController,您只需要從上下文中刪除該對象,它就會爲您提取更改並刪除行。

所以刪除deleteRowsAtIndexPaths:線,而是稱之爲:

[self.fetchedResultsController.managedObjectContext deleteObject:user]; 
+0

我得到: 終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「無效的更新:行第0更新(11)後,包含在現有的部分中的行數的無效數量必須等於更新之前該部分中包含的行數(11),加上或減去從該部分插入或刪除的行數(0插入,1刪除),加上或減去移入或移出的行數該部分(0移入,0移出)。' – user1845360 2013-05-06 09:15:52

+3

@ user1845360:您必須刪除該對象,但您必須*不*調用deleteRowsAtIndexPaths。稍後在FRC委託方法中完成。 – 2013-05-06 09:18:10

+0

@MartinR好點,我會更新我的答案。 – 2013-05-06 09:18:47

1

看一看這個Answer,你所要做的就是從您的數據庫以及從NSFetchedResultsController刪除NSManagedObject。

相關問題