У меня есть простая функциональность диспетчера каталогов с элементами в категориях, ЗА ИСКЛЮЧЕНИЕМ одного элемента может быть в нескольких категориях.
Элемент имеет ключ 'parents', который является NSSet родительских категорий.
Категория имеет ключ 'items', который является NSOrderedSet его подэлементов.
Я использую NSFetchedResultController
и его делегата для заполнения моей таблицы элементами
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(ANY parents == %@)", self.category];
[fetchRequest setFetchBatchSize:30];
[fetchRequest setSortDescriptors:@[????????];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
Итак, используя этот код, я могу получить список элементов в self.category.
В моем пользовательском интерфейсе у меня есть Drag and Drop
функциональность. Так что я могу перемещать элементы внутри категорий.
Мой вопрос: как Category1, так и Category2 содержат ссылки на одни и те же элементы Item1 и Item2. Мне нужно, чтобы Item1, Item2 заказывал в Category1 и Item2, Item1 в Category2. Вот почему я сделал свойство category.items как NSOrderedSet
.
Но я просто не могу сортировать предметы по их индексу в category.items
Я пытался использовать блоки в дескрипторах сортировки - не сработало, я пытался использовать селекторы в дескрипторах сортировки - не работало, я пытался создавать подклассы дескрипторов сортировки - как-то работает, но не обновляет элементы, когда я меняю их индекс. category.items.
Вот так в моем NSSortDescriptorSubclass:
- (NSComparisonResult)compareObject:(Item*)object1 toObject:(Item*)object2 {
int index1 = [self.category.items indexOfObject:object1];
int index2 = [self.category.items indexOfObject:object2];
if (index1 > index2) {
return NSOrderedDescending;
} else if (index1 < index2) {
return NSOrderedAscending;
}
return NSOrderedSame;
} But items order won't be updated in my UI if I change order in Category.items
Поэтому, пожалуйста, помогите мне отсортировать элементы по их индексу в наборе category.items. Может быть, есть способ сделать это с помощью каких-то ключей, операторов, выражений, чего-то еще. Спасибо.
[tableView reloadData];
или, возможно, также[self.frc performFetch:self.frc.fetchRequest error:nil];
? 02.04.2013markDirty
, потому что оно обновляет только одну строку в моем табличном представлении, а не все, и пока у меня есть изображения с URL-адресов, определенно было бы лучше обновить только одну запись. еще раз спасибо! 03.04.2013