我有两个实体。客户和项目。一个客户有很多项目,但一个项目只能分配给一个客户。这是使用数据模型设计的。
- 客户实体具有属性clientName和与许多项目的关系
- 项目实体具有属性projectName和与一个客户的关系
我想从我的 ManagedObjectContext 中检索所有客户端,其中客户端按clientName升序排序,然后让该客户端的项目按projectName升序排列。
这是我当前的代码,我知道这是错误的,因为 Client 实体无法按projectName排序:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Creating the sort descriptors array.
NSSortDescriptor *clientSort = [[NSSortDescriptor alloc] initWithKey:@"clientName" ascending:YES];
// this next row is super wrong
NSSortDescriptor *projectSort = [[NSSortDescriptor alloc] initWithKey:@"projectName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:clientSort. projectSort, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSError *error;
// Assign to NSArray of ViewController
clientArray = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
将其分配给 后clientArray
,我想使用另一种方法并要求项目并将它们按升序排列。例子:
Client *temp = (Client *)[clientArray objectAtIndex:selectedClient];
NSArray *projectsArray = [temp.projects allObjects];
Project *project = [projectsArray objectAtIndex:selectedProject];
return project.projectName;
我看到了一个实现,他们获得了客户,然后手动对项目进行排序......但这有点贵,我希望在查询上下文时有功能可以做到这一点。