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もちろん間違っています。それは明らかに1対1の関係でなければなりません。MapPOI1つのタイプしか持てないと仮定すると、キーパスはのようになり@"type.name"ます。

ただし、MapPOI複数のタイプを持つことができる場合は、次のようにすることができます。

POIエンティティではなくtypesエンティティを取得します。セクションキーパスは必要ありません。次に、管理対象オブジェクト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 に答える