我有一个Tag带有字符串属性的实体tagName。我去获取这个实体中的所有对象到一个NSFetchedResultsController,但我希望带有tagName“Main”的标签成为第一个对象。这就是我现在正在做的事情:
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")finally 出现,但只有当我对对象进行更新时!无论我尝试了什么,我都无法将排序应用于初始提取。
有什么想法吗?