问题描述
- 使用NSPredicate放置条目
-
从数据库中提出 Friend 目标,条件是匹配NSFetchedResultsController给出的user部分。如下:- (NSFetchedResultsController *)fetchedFriendsResultsController { if (_fetchedFriendsResultsController != nil) { return _fetchedFriendsResultsController; } //Get the correct array of friends for that user NSFetchRequest *fetchRequestItems = [[NSFetchRequest alloc] init]; NSEntityDescription *entityItem = [NSEntityDescription entityForName:@"Friend" inManagedObjectContext:self.managedObjectContext]; [fetchRequestItems setEntity:entityItem]; User* myUser = [DataBaseManager getCurrentUser:managedObjectContext]; [fetchRequestItems setPredicate:[NSPredicate predicateWithFormat:@"user == %@", myUser]]; //Sort by name descending NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; [fetchRequestItems setSortDescriptors:sortDescriptors]; NSFetchedResultsController *fetchedItemsResultsController =[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestItems managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; _fetchedFriendsResultsController = fetchedItemsResultsController; return _fetchedFriendsResultsController; }
此代码运行正常,所有的friend都成功按字母顺序递减排列。
现在我需要一个特殊的friend对象,名字不是按照字母顺序。然后将它们排在其他friend之前。判断条件是where 'name' == @"SPECIFIC_NAME"。
应该怎么实现?是不是要将这个特殊case添加到分类描述符或者Predicate中?
谢谢
解决方案
可能是你需要一个attribute
和sortDescriptor
。
如果是特殊的friend,用类似isSpecial带有属性显示。 作为第一sortDescriptor
添加:
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"isSpecial" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil];
[fetchRequestItems setSortDescriptors:sortDescriptors];
时间: 2024-08-05 03:34:43