データが変更されたときに、NSFetchedResultsControllerが配列の最初の並べ替えのみを行うという問題が発生してNSSortDescriptor
います。sortDescriptors
本当に腹立たしいです。
NSFetchedResultsControllerを使用して、アイテムのリストを表示しているテーブルビューを管理しています。これらのアイテムにはプロパティに基づく固有の順序number
がありますが、ユーザーはアイテムをお気に入りに追加できます。お気に入りのアイテムは、number
プロパティで並べ替えられて、テーブルビューの上部に表示されます。
したがって、モデルは次のようになります。
@interface Thing : NSManagedObject
@property (nonatomic, retain) NSNumber *number;
@property (nonatomic, retain) NSNumber *favorite;
@end
@implementation Thing
@dynamic number;
@dynamic favorite;
@end
そして、私は私のNSFetchedResultsController
ように構成しています:
- (void)loadView {
...
//
// configure fetched results controller for the things table view
NSFetchRequest *fetchThings = [[NSFetchRequest alloc] init];
fetchChannels.entity = [NSEntityDescription entityForName:NSStringFromClass([Thing class])
inManagedObjectContext:[DataManager sharedInstance].managedObjectContext];
fetchThings.sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"favorite" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES] ];
_fetchController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchThings
managedObjectContext:[DataManager sharedInstance].managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
NSError *error = nil;
if (![_fetchController performFetch:&error]) {
NSLog(@"error performing fetch! %@", error.localizedDescription);
}
}
テーブルが最初にロードされるときに_fetchController
、アイテムが正しくソートされるため、次のようになります。
- Thing: favorite = YES, number = 2
- Thing: favorite = YES, number = 3
- Thing: favorite = NO, number = 1
- Thing: favorite = NO, number = 4
ただし、Thing Number 2のお気に入りを解除すると、1番目の並べ替え記述子でのみ並べ替えられ、リストは次のようになります。
- Thing: favorite = YES, number = 3
- Thing: favorite = NO, number = 2
- Thing: favorite = NO, number = 1
- Thing: favorite = NO, number = 4
誰かがこの問題に遭遇したか、それに対する回避策を見つけましたか?
アップデート
私がすべてを好きで、次にすべてを嫌うと、ソートはうまくいくように見えます。これは、これが障害のある問題である可能性があると私に信じさせますか?残念ながら、それを回避する方法もわかりません。