Ios 使用NSFetchedResultsController的tableView中没有数据视图

Ios 使用NSFetchedResultsController的tableView中没有数据视图,ios,objective-c,uitableview,core-data,Ios,Objective C,Uitableview,Core Data,我在tableview中使用的是NSFetchedResultsController,它工作正常。我的问题是,当我的\u fetchedResultsController有0行时,我想创建“无数据视图” 我尝试在我的numberOfSectionsInTableView:中创建它,如下所示 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if ([[_fetchedResultController.s

我在tableview中使用的是
NSFetchedResultsController
,它工作正常。我的问题是,当我的
\u fetchedResultsController
有0行时,我想创建“无数据视图”

我尝试在我的
numberOfSectionsInTableView:
中创建它,如下所示

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if ([[_fetchedResultController.sections firstObject] numberOfObjects] == 0) {
        MyNoDataView *view = [[MyNoDataView alloc] initWithFrame:tableView.frame];
        tableView.backgroundView = view;
        tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        return 0;
    }
    else {
        tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        tableView.backgroundView = nil;
        return  1;  
    }
}
效果很好。如果还没有插入数据,它将不显示数据视图,如果有数据,它将显示我的tableview

我的问题始于我对其行执行删除操作。从技术上讲,我只是使用这个
NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isActive == %@ ", @YES];
[fetchRequest setPredicate:predicate];
然后,如果只有一行,我删除了它,我会得到这个错误

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView internal bug: unable to generate a new section map with old section count: 1 and new section count: 0'
因此,我尝试将我的
numberOfSectionsInTableView:
删除,突然这些错误消失了。我不知道这里发生了什么,但我认为我的条件on
numberOfSectionsInTableView:
有一个错误


任何帮助都将不胜感激。非常感谢你

已解决

根据他的回答,在numberOfSectionsInTableView中分配“MyNodeDataView”并设置单独的样式是非常糟糕的做法。因此,我最终在获取的结果控制器委托上修改了我的
controllerDidChangeContent:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates.
    if ([controller.fetchedObjects count]) {
        self.tableView.backgroundView = nil;
    }
    else {
        MyDataView *view = [[MyDataView alloc] initWithFrame:self.tableView.frame];
        self.tableView.backgroundView = view;
    }

    [self.tableView endUpdates];
}

检查副本。您需要在NSFetchedResultsController委托方法中处理此问题。NSFetchedResultsController“不知道”您是否正在添加自定义单元格和节。它只提供自己的数据,并从自己的帐户中插入单元格和节,如果您已经有单元格和节,则数字不能正确添加upp,您将崩溃。另外,请注意,为什么在numberOfSectionsInTableView中分配“MyNodeDataView”并设置单独的样式?这真的是很糟糕的做法。编辑我删除了重复的标志。提供更多关于如何处理插入和删除等的代码,以便我们更容易找到错误。也许这可以帮助您搜索错误代码:我只想创建无数据视图tbh。那么,您认为我应该如何分配MyNodeDataView并将其作为tableview背景?事先谢谢你,没错。您甚至可以提供一个EmptyDataCell,并在获取的数据为空时返回CellForRowatineXpath中的空单元格。在controller.delegate方法中,当在“空”到“内容”或“内容”到“空”之间切换时,只需重新加载数据。否则就让委托方法正常运行:)谢谢,非常感谢!现在我将尝试修改它的委托。再次感谢你!感谢您发布解决方案。我也有类似的问题。现在修好了。@sweta。听到这个消息我很高兴!