Tag
string プロパティを持つエンティティがありますtagName
。このエンティティ内のすべてのオブジェクトを にフェッチしようとしましたが、「メイン」のNSFetchedResultsController
タグを最初のオブジェクトにしたいです。tagName
これが私が今していることです:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Tag" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *lastDescriptor2 =
[[[NSSortDescriptor alloc] initWithKey:@"tagName" ascending:NO comparator:^NSComparisonResult(NSString* tag1, NSString* tag2) {
NSLog(@"compare");
if ([tag1 isEqualToString:@"main"]) return NSOrderedAscending;
if ([tag2 isEqualToString:@"main"]) return NSOrderedDescending;
return [tag1 compare:tag2];
}] autorelease];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:lastDescriptor2]];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
self.fetchedResultsController.delegate=self;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
このコードは私のviewDidLoad
メソッドで呼び出され、一度だけ呼び出されます。初めて呼び出されると、何らかの理由で、ここの sortDescriptor が適用されません。呼び出されないだけです (NSLog
ステートメントも表示されません)。BOOL
指定した値のみに基づいて結果が返されますascending
- ブロックは無視されます。
しかし、新しいTag
オブジェクトをに挿入しMOC
、NSFetchedResultsController
更新デリゲート メソッドが呼び出されると、実際の sortDescriptor が適用され、NSLog(@"compare")
最後に が表示されますが、それはオブジェクトを更新した場合のみです! 何を試しても、並べ替えを最初のフェッチに適用できません。
アイデアはありますか?