2017-02-14 69 views
0

在我的应用程序中,我有一个表视图与mapkit的值。我可以编辑表格,删除行,但当应用程序重新开始时,同样的删除行仍然存在....我该如何解决这个问题?编辑代码:无法删除行/ coredata

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

    [_locations removeObjectAtIndex:[indexPath row]]; 

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

    [tableView reloadData]; 
} 

任何提示?谢谢

+0

您必须**不要**在deleteRowsAtIndexPaths后调用reloadData,但您必须删除Core Data堆栈中的对象并保存上下文。 – vadian

+0

也许你不会从数据库中删除你的对象。使用[NSManagedObjectContext deleteObject:]然后保存它。 –

+0

所有这一切,我必须在编辑表方法中实现? – FuManchu

回答

0
  1. 使用NSFetchedResultsController从核心数据加载数据。
  2. 实施委托功能以在更改发生时更新您的视图。
  3. 当你删除某些东西时,删除一个块将其从核心数据中删除。 (如果您使用NSPersistentContainer则使用performBackgroundTask:)。
  4. 不要更新您的意见。这将自动发生,因为您在步骤2中实现了代理回调。
+0

在performBackgroundTask(_ :)'的私有'context中调用'save()'不会导致NSFetchedResultsController更新:http://stackoverflow.com/a/42279670/6793476 – Tobi

+0

在你的核心数据设置:'self.persistentContainer.viewContext.automaticallyMergesChangesFromParent = YES;' –

+0

当然,默认为NO,因此'save()'既不会更新'viewContext'也不会通知'NSFetchedResultsController'。我只是认为这应该被添加到你的答案。 – Tobi