0

我有一个托管对象来表示地图上的一个点。这些点有零多类型。我还想显示一个分段的表格视图。当类型是 MapPOI 对象上的单个值时,我使用 NSFetchedResultsController 进行此操作。但是现在类型是在不同的对象中,与“MapPOI”之间的关系称为“类型”,我该如何编写查询(可以吗?)

原来的:

- (NSFetchedResultsController *)newFetchedResultsControllerWithSearch:(NSString *)searchString
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MapPOI"];

    if(searchString.length)
    {
        request.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", searchString];
    }
    request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES ],[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES ],nil ];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                                                managedObjectContext:self.campus.managedObjectContext
                                                                                              sectionNameKeyPath:@"type"
                                                                                                       cacheName:nil];
    aFetchedResultsController.delegate = self;


    NSError *error = nil;
    if (![aFetchedResultsController performFetch:&error])
    {
       NSLog(@"Error performing institution fetch with search string %@: %@, %@", searchString, error, [error userInfo]);
    }

    return aFetchedResultsController;
}

我试过类似的东西

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                                            managedObjectContext:self.campus.managedObjectContext
                                                                                              sectionNameKeyPath:@"types.name"
                                                                                                       cacheName:nil];

但这导致

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid to many relationship in setPropertiesToFetch: (types.name)'
4

1 回答 1

3

非常灵活,NSFetchedResultsController可以与各种视图一起使用,而不仅仅是表视图。

sectionNameKeyPath当然是错的。它显然必须是一对一的关系。假设一个人MapPOI只能有一种类型,那么关键路径应该是@"type.name".

但是,如果一个MapPOI可以有多种类型,则可以执行以下操作:

获取类型实体而不是 POI 实体。您不需要部分键路径。现在objectAtIndexPath:indexPath.row将获取一个Type托管对象。

对于节数,请使用

self.fetchedResultsController.fetchedObjects.count

对于章节标题,请使用

[[self.fetchedResultsController.fetchedObjects objectAtIndex:section] name];

对于部分使用的行数

Type *type = [self.fetchedResultsController.fetchedObjects objectAtIndex:section];
type.mapPOIs.count; 

并且应该很明显如何用MapPOI实体填充单元格。

于 2013-03-05T17:35:54.643 回答