删除并重新插入CoreDataTableViewController后,未填充UITableView

时间:2013-08-26 12:59:28

标签: ios core-data uitableview cs193p

我正在使用Stanford的CoreDataTableViewController处理应用程序。所有数据库保存和提取工作正常,直到我删除CDTVC文件,然后再次添加它们。现在它没有任何东西。未调用CellForRowAtIndexPath,虽然获取请求返回数据库中正确数量的条目(反映每个新条目),但numberOfRowsInSection和numberOfSections都返回0。

我不知道会发生什么。我尝试重新创建子类,创建一个全新的表视图控制器,我从模拟器和我的设备中删除了应用程序。设置了dataSource和delegate的出口,fetchedResultsController得到设置并且不是nil,并且仍在调用CoreDataTableViewController,setFetchedResultsController和performFetch中的方法。

由于

2 个答案:

答案 0 :(得分:1)

最终答案

聊天会话后更新我的答案。切换到TLIndexPathToolsTLIndexPathController代替NSFetchedResultsController解决了问题。

回答#2

听起来你说以下方法返回零:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}

并且您已验证fetchedResultsController已设置并且您已调用performFetch并且结果为非零,即fetchedObjects属性返回非空数组。我没有看到所有这些事情都是真的,并且上面的方法返回0.你能在上面的方法中放一个断点并重新验证这些东西吗?也许在调用performFetch之前调用此方法。

如果您继续被卡住,可以试试我的TLIndexPathTools库。它提供了NSFetchedResultsController的替代方案。查看Core Data示例项目。

回答#1

检查您是否正在设置表视图控制器的fetchedResultsController属性。根据您的问题描述,听起来这个属性是nil

答案 1 :(得分:0)

如果没有调用tableView:cellForRowAtIndexPath:,则有三种可能的解决方案:

  • tableview dataSource属性设置不正确;
  • numberOfSectionsInTableView:返回0;
  • 或最后tableView:numberOfRowsInSection:返回0。

我的猜测,我会从你告诉我们的内容中选出第三个。

通常,使用获取的结果控制器,您可以使用接近它的东西:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return _fetchedResultsController.sections.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSUInteger rows = 0;
    id sectionInfo = [_fetchedResultsController.sections objectAtIndex:section];
    rows = [sectionInfo numberOfObjects];
    return rows;
}