1 つのアイテムが複数のカテゴリに属することを除いて、カテゴリ内のアイテムを含む単純なカタログ マネージャー機能があります。
アイテムには、親カテゴリの NSSet である「parents」キーがあります
カテゴリには、そのサブアイテムの NSOrderedSet である「items」キーがあります
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 のアイテムのリストを取得できます。
私のUIにはDrag and Drop
機能があります。そのため、カテゴリ内でアイテムを移動できます。
私の質問: Category1 と Category2 の両方に、同じアイテム Item1 と Item2 への参照が含まれています。Category1 に Item1、Item2 の順序、Category2 に Item2、Item1 の順序が必要です。そのため、category.items プロパティを にしましNSOrderedSet
た。
しかし、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;
}
ただし、Category.items で順序を変更すると、UI でアイテムの順序が更新されません。
ですから、category.items セットのインデックスでアイテムを並べ替えるのを手伝ってください。おそらく、いくつかのキー、演算子、式、その他を使用してそれを行う方法があります。ありがとう。