将表的行数设置为特定实体

时间:2014-01-18 00:29:42

标签: ios uitableview core-data nsfetchedresultscontroller

我正在尝试将表视图控制器的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];

}

2 个答案:

答案 0 :(得分:1)

我的问题是,我没有同时将两个对象保存到核心数据,而是有两种方法来保存它们,一种用于字符串,一种用于图像。我只是将它们浓缩成一种方法,它运作得很好。

答案 1 :(得分:0)

只要您的所有属性名称都正确无误,我就不会发现您的numberOfRowsInSection:实施有任何问题。如果您objects检查nil,则还应检查error != nil以查看CoreData是否创建了错误。由于您没有得到您对此方法的期望,因此可能会收到错误。

您只获取urlString属性,但按timeStamp排序。与我之前写的相反,这本质上是错误的。使用selectDistinctResults,您无法按照您未获取的属性进行排序。那可能是你的问题。

其他想法可能是numberOfObjects实际上为零,因为您未在CoreData中保存任何插入的数据或sectionInfonil。您可能没有正确连接dataSource的{​​{1}}属性,因此不会调用此方法。

您也可以考虑外部化UITableView并使用NSFetchedResultsControllerNSFetchedResultsControllerDelegate调用。这样,您可以在添加或删除新条目时立即获得更新。