У меня проблема (честно говоря, проблема понимания) с NSFetchedResultsController и новыми отношениями NSOrderedSet, доступными в iOS 5.
У меня есть следующая модель данных (хорошо, моя настоящая - не модель ящика и носка! ), но это служит простым примером:
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. Я не уверен, что установить критерии сортировки, чтобы убедиться, что это произойдет.