Master> ---->>项目> ---->>任务> ---->文献
我正在使用NSFetchResultController从数据库中获取对象。任务根据项目的任务数加载到tableview中。 (目前只有一个项目)
我可以使用以下代码来获取任务对象
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Tasks" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"taskId" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:context sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
返回任务数量,我可以像这样使用。
id sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section];
但我需要使用顶级对象,如Master - >>项目 - >>任务。如何实现顶级对象,而不是使用FetchResultController中的“任务”。
即,
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Master" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
我在master中没有任何id可以排序。师父与项目有很多关系。
答案 0 :(得分:0)
没有属性的实体是一个糟糕的设计决策。属性用于区分各种对象,而没有这意味着您实际上只有一个“主”对象,并且所有“项目”实例都与此相关。
所以,我想提出的第一点是删除Master实体,只有“Project”和“Task”
如果由于某种不明原因你想保留“主人”。以下是访问单个对象的方法。
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Master"];
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
返回的数组将包含主对象,您可以使用它来访问任务,如下所示
Master *master = [results lastObject];
NSSet *tasks = master.projects.tasks;