我有一个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 出现,但只有当我对对象进行更新时!无论我尝试了什么,我都无法将排序应用于初始提取。
有什么想法吗?