numberOfRowsInSection:用于特定属性

时间:2014-01-17 00:13:13

标签: ios uitableview core-data

我有一个UITableView,其中填充了来自核心数据的数据,我现在已经设置了它,以便根据实体中的对象数量调整表的大小。我的问题是我知道这个实体有两个属性。现在tableview有一堆额外的单元格,因为它为实体中的所有内容创建一个,而不仅仅是在特定属性中为每个对象创建一个。所以我想根据属性中的对象数量而不是整个实体来设置numberOfRowsInSection:。我该怎么做?

我目前的表现如何:

id  sectionInfo =
[[_fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];

编辑:

这就是我的尝试:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
//    id  sectionInfo =
//    [[_fetchedResultsController sections] objectAtIndex:section];
//    return [sectionInfo numberOfObjects];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSManagedObjectContext *context = [self managedObjectContext];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"FeedEntity" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"imageData != nill"];
    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

    id  sectionInfo =
    [[theFetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];

}

但是这导致了这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An instance of NSFetchedResultsController requires a fetch request with sort descriptors'

2 个答案:

答案 0 :(得分:0)

所以你有一个有两个属性的实体。您需要过滤要为tableview显示的对象。我认为您需要使用NSFetchRequest和NSPredicate通过检查对象的属性来过滤对象。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [your context];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FeedEntity" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"imageData = nil"];
request.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"text" ascending:NO]];
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

答案 1 :(得分:0)

好的,这很容易解决。是否每个字符串都会有一个图像?为什么不在yourStringDataArray.length方法中返回-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section?这样,您将只获得显示数组中字符串总数所需的单元格数量。