Ios 删除CoreData对象,然后调用[tableView reloadData]会导致SIGABRT

Ios 删除CoreData对象,然后调用[tableView reloadData]会导致SIGABRT,ios,iphone,uitableview,core-data,Ios,Iphone,Uitableview,Core Data,我支持删除包含tableView的UIView中的行: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [self.fetc

我支持删除包含tableView的UIView中的行:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
  [self.fetchedResultsController.managedObjectContext
            deleteObject:[self.fetchedResultsController
            objectAtIndexPath:indexPath]];
  NSError *error;
  if (![[self.fetchedResultsController managedObjectContext] save:&error]) {
   NSLog(@"Unresolved error %@, %@, %@", error, [error userInfo],
                    [error localizedDescription]);
  }
  else {NSLog(@"Apparently successful");}
  [self.tableView reloadData];
 }
}
当我尝试此操作时,我在控制台中收到“显然成功”的消息,但在configureCell中收到一条SIGABRT消息。就好像该对象没有被删除,而configureCell正试图呈现一个丢失的对象。(不过,当我重新运行应用程序时,记录就消失了。)


有什么想法吗

当使用
NSFetchedResultsController
时,您不应该让
[self.tableView重载数据]
在那里

删除对象时,将为您调用右侧的
NSFetchedResultsControllerDelegate
方法,您应该在其中更新表视图


创建一个空的基于导航的应用程序,并选中“将核心数据用于存储”复选框。您将得到的是一个空项目,它可以纠正所有这些错误。这将是一个很好的例子。

发布更多的代码将对我们有所帮助,特别是您的tableView:CellForRowatineXpath:method,它可能是这里的罪魁祸首。好的,下面是崩溃之前发生的情况:-(UITableViewCell)tableView:(UITableView*)tableView CellForRowatineXpath:(NSIndexPath*)indexPath{[…不适合此评论的样板文件…][self-configureCell:cell atIndexPath:indexPath];返回单元格;}-(void)configureCell:(UITableViewCell)cell atIndexPath:(NSIndexPath*)indexPath{NSManagedObject*mo=[fetchedResultsController objectAtIndexPath:indexPath];int-ObjectType=[(Type*)[mo valueForKey:@“Type”]globalid]intValue];然后--BOOM!Hmm--对此不确定。我删除了[self.tableView reloadData],表没有更新(行没有消失)。当我关闭ViewController(模式VC)时然后重新打开它,我得到了相同的SIGABRT。这是一个ViewController,包含一个UITableView作为属性,implements。然后显示更多代码。SIGABRT还附带一个堆栈跟踪,可能会给出一个很好的提示。如果表没有更新,那么您就没有实现
NSFetchedResultsController
的委托方法>正确。@St3fan的回答是正确的。显示完整的错误也会有帮助。我终于有机会更仔细地看了一下,你是对的,我没有正确地实现NSFetchedResultsControllerDelegate——Apple文档帮助我实现了这一点。