我正在使用Stanford的CoreDataTableViewController处理应用程序。所有数据库保存和提取工作正常,直到我删除CDTVC文件,然后再次添加它们。现在它没有任何东西。未调用CellForRowAtIndexPath,虽然获取请求返回数据库中正确数量的条目(反映每个新条目),但numberOfRowsInSection和numberOfSections都返回0。
我不知道会发生什么。我尝试重新创建子类,创建一个全新的表视图控制器,我从模拟器和我的设备中删除了应用程序。设置了dataSource和delegate的出口,fetchedResultsController得到设置并且不是nil,并且仍在调用CoreDataTableViewController,setFetchedResultsController和performFetch中的方法。
由于
答案 0 :(得分:1)
最终答案
聊天会话后更新我的答案。切换到TLIndexPathTools的TLIndexPathController
代替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:
,则有三种可能的解决方案:
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;
}