1

我正在使用斯坦福大学的 CoreDataTableViewController 开发一个应用程序。在我删除 CDTVC 文件然后再次添加它们之前,所有数据库保存和获取都正常工作。现在它什么也得不到。未调用 CellForRowAtIndexPath 并且尽管 fetch 请求返回数据库中正确的条目数(反映每个新条目),但 numberOfRowsInSection 和 numberOfSections 都返回 0。

我不知道会发生什么。我尝试重新创建子类,创建一个全新的 Table View Controller,然后从模拟器和设备中删除了该应用程序。我作为数据源和委托的出口已设置,fetchedResultsController 已设置且不为零,CoreDataTableViewController、setFetchedResultsController 和 performFetch 内的方法仍在被调用。

谢谢

4

2 回答 2

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.

于 2013-08-26T15:38:03.713 回答
0

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

  • tableviewdataSource属性设置不正确;
  • 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;
}
于 2013-08-26T14:26:09.980 回答