Отношения NSFetchedResultsController и NSOrderedSet

У меня проблема (честно говоря, проблема понимания) с NSFetchedResultsController и новыми отношениями NSOrderedSet, доступными в iOS 5.

У меня есть следующая модель данных (хорошо, моя настоящая - не модель ящика и носка! ), но это служит простым примером:

enter image description here

Drawer и Sock оба являются NSManagedObjects в модели / хранилище Core Data. На Drawer отношение socks является , предписанным для -многие отношения к Sock . Идея состоит в том, что носки находятся в ящике в определенном порядке. На Sock отношение ящик является обратным отношения socks .

В UIViewController я дра создайте UITableView на основе этих сущностей. Я загружаю таблицу с помощью NSFetchedResultsController .

- (NSFetchedResultsController *)fetchedResultsController1 {
    if (_fetchedResultsController1 != nil) {
        return _fetchedResultsController1;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sock" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"drawer.socks" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    self.fetchedResultsController1 = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:@"SocksCache"];
    self.fetchedResultsController1.delegate = self;

    return _fetchedResultsController1;    
}

Когда я запускаю это, я получаю следующую ошибку: *** Завершение работы приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «здесь не разрешен ключ для многих»

Это имеет смысл для меня, поскольку отношение представляет собой NSOrderedSet , а не отдельную сущность для сравнения в целях сортировки.

Я хочу добиться, чтобы Socks отображались в UITableView в порядке, указанном в отношении socks . Я действительно не хочу иметь порядок сортировки, но NSFetchedResultsController , отличный компонент, настаивает на том, чтобы он был. Как я могу сказать ему использовать порядок носков в сущности Drawer. Я не хочу, чтобы в таблице вообще отображались объекты ящика.

Примечание: Я использую это только в приложении iOS5, поэтому доступны упорядоченные отношения.

Любой, кто может предложить мне какое-либо направление, будет очень признателен. Спасибо за ваше время.

Изменить: Таким образом, табличное представление, отображающее носки, делает это только для одного ящика. Я просто хочу, чтобы представление таблицы соблюдало порядок, который содержится в отношении socks. Я не уверен, что установить критерии сортировки, чтобы убедиться, что это произойдет.

34
задан Damien 7 January 2012 в 00:36
поделиться