【发布时间】:2014-02-06 15:25:48
【问题描述】:
当我有两个实体 Parent 和 Child(之间的关系 - “children”,反向 - “parent”)时,获取具体父级的子级很简单,请参见下面的代码:
Parent *parent = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Child" inManagedObjectContext:context]];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
[request setSortDescriptors:@[sort]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(parent == %@)", parent]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSLog(@"results :%@", results);
是的,当然,我可以在没有 NSFetchRequest 的情况下获得孩子,但就我而言,我必须这样做; 好的,我的麻烦是我只有一个实体,例如“父母”(关系 - “父母”,逆 - “父母”); 一位家长还有另外 3 位家长; 如何让所有父母具体父母;我尝试这样做:
Parent *parent = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Parent" inManagedObjectContext:context]];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
[request setSortDescriptors:@[sort]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(parents == %@)", parent]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSLog(@"results :%@", results);
但是我的程序程序崩溃了: 由于未捕获的异常“NSInvalidArgumentException”而终止应用,原因:“此处不允许使用多对多键”
【问题讨论】:
-
显示模型的图像(至少是实体)。你应该有两个相反的关系,两个名字是什么?
-
相当混乱,数据模型的屏幕截图会有所帮助。
标签: ios objective-c core-data