我正在尝试将表视图控制器的numberOfRowsInSection:设置为特定核心数据实体属性中的项目数量。例如,我在每个单元格的属性中都有一个保存在核心数据中的字符串,我希望将相同数量的单元格作为字符串。然后,我在实体中有另一个属性,其中包含每个单元格的图像。由于这两个属性,我想将单元格的数量设置为stings的数量,而不是实体中的对象数量。如果我根据实体中的对象数量来做,那么我将需要两倍的单元格数量。我有办法尝试这样做,但表格没有创建任何单元格。我的问题是目前没有使用此numberOfRowsInSection:
创建单元格。如何修复此代码以便显示单元格?
以下是我尝试这样做的方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FeedEntity" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setReturnsDistinctResults:YES];
[request setPropertiesToFetch:@[@"urlString"]];
request.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO]];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
// Execute the fetch.
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
// Handle the error.
}
id sectionInfo =
[[theFetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
答案 0 :(得分:1)
我的问题是,我没有同时将两个对象保存到核心数据,而是有两种方法来保存它们,一种用于字符串,一种用于图像。我只是将它们浓缩成一种方法,它运作得很好。
答案 1 :(得分:0)
只要您的所有属性名称都正确无误,我就不会发现您的 numberOfRowsInSection:
实施有任何问题。如果您objects
检查nil
,则还应检查error
!= nil
以查看CoreData是否创建了错误。由于您没有得到您对此方法的期望,因此可能会收到错误。
您只获取urlString
属性,但按timeStamp
排序。与我之前写的相反,这本质上是错误的。使用selectDistinctResults
,您无法按照您未获取的属性进行排序。那可能是你的问题。
其他想法可能是numberOfObjects
实际上为零,因为您未在CoreData中保存任何插入的数据或sectionInfo
为nil
。您可能没有正确连接dataSource
的{{1}}属性,因此不会调用此方法。
您也可以考虑外部化UITableView
并使用NSFetchedResultsController
从NSFetchedResultsControllerDelegate
调用。这样,您可以在添加或删除新条目时立即获得更新。