Ios 核心数据:获取1对多关系中的所有子级

Ios 核心数据:获取1对多关系中的所有子级,ios,iphone,ipad,core-data,nsfetchrequest,Ios,Iphone,Ipad,Core Data,Nsfetchrequest,我有一对多的关系,我成功地将数据放入其中。问题是我无法通过relationship属性提取它 我的添加代码: NSManagedObjectContext *context = [[CBICoreDataController sharedInstance] masterManagedObjectContext]; NSManagedObject *orders = [NSEntityDescription insertNewObject

我有一对多的关系,我成功地将数据放入其中。问题是我无法通过relationship属性提取它

我的添加代码:

   NSManagedObjectContext *context = [[CBICoreDataController sharedInstance] masterManagedObjectContext];
NSManagedObject *orders = [NSEntityDescription
                           insertNewObjectForEntityForName:@"UnsyncedOrders"
                           inManagedObjectContext:context];
   [orders setValue:[dictionary valueForKey:@"specialInstructions"] forKey:@"specialInstructions"];
[orders setValue:[dictionary valueForKey:@"poNumber"] forKey:@"poNumber"];
[orders setValue:[dictionary valueForKey:@"specialInstructions"] forKey:@"specialInstructions"];
 [orders setValue:[dictionary valueForKey:@"deliveryDate"] forKey:@"deliveryDate"];
 [orders setValue:[dictionary valueForKey:@"account"] forKey:@"account"];

NSMutableSet *muteSet=[orders mutableSetValueForKey:@"items"];

for (NSDictionary *dict in [dictionary valueForKey:@"items"]) {
    NSManagedObject *items = [NSEntityDescription
                              insertNewObjectForEntityForName:@"UnsyncedOrderItems"
                              inManagedObjectContext:context];
    [items setValue:[dict valueForKey:@"arraykey"] forKey:@"arrayKey"];
     //Other Sets Here

    [muteSet addObject:items];
}

[orders setValue:muteSet forKey:@"items"];

    NSError *error;
    if (![context save:&error]) {
        NSLog(@"Error saving in writeToMenuCostingDetailsTable: %@", [error localizedDescription]);
    }
我现在有什么东西可以取,但它不起作用:

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"arrayKey" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

NSEntityDescription *parent = [NSEntityDescription entityForName:@"UnsyncedOrders"
            inManagedObjectContext:context];

NSEntityDescription *child = [NSEntityDescription entityForName:@"UnsyncedOrderItems"
            inManagedObjectContext:context];


[fetchRequest setEntity:child];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orders == %@", parent];
[fetchRequest setPredicate:predicate];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

NSError *error;

[aFetchedResultsController performFetch:&error];
NSArray *fetchedObjects = [aFetchedResultsController fetchedObjects];

您的
订单
关系与
非同步订单的特定实例相关。但是,当您尝试执行提取时,可以执行以下操作:

NSEntityDescription *parent = [NSEntityDescription entityForName:@"UnsyncedOrders"
        inManagedObjectContext:context];
[...]
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orders == %@", parent];
[fetchRequest setPredicate:predicate];
您正在尝试获取
orders
关系指向
UnsyncedOrders
实体本身的实例,而不是与
UnsyncedOrders
的特定实例相关的实例。那总是会失败的。事实上,如果您正在检查
performFetch:
的结果,它很有可能返回
NO
,并向您提供某种描述问题的错误


如果要获取与
UnsyncedOrders
的特定实例相关的
UnsyncedOrderItems
,则需要使用引用特定实例的谓词。但是,如果您已经拥有该实例,则不需要获取—只需询问
UnsyncedOrders
实例的
项关系的值即可。

这就是我最终使用的解决方案:

NSManagedObjectContext *context = [[CBICoreDataController sharedInstance] masterManagedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"UnsyncedOrders"
                                          inManagedObjectContext:context];
NSError *error = nil;
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (UnsyncedOrders *info in fetchedObjects) {
    [mutableArray addObject:info.items];
}

我获取了你的基本代码并输入了它,但现在我获取了你的基本代码并添加了,但现在我由于未捕获的异常“NSInvalidArgumentException”而终止了应用程序,原因是:“此处不允许使用多个键”***第一次抛出调用stackNSEntityDescription*parent=[NSEntityDescription entityForName:@“UnsyncedOrders”inManagedObjectContext:context];NSFetchRequest*request=[[NSFetchRequest alloc]init];NSPredicate*谓词=[NSPredicate谓词格式:@“items==%@”,父级];[请求集谓词:谓词];NSSortDescriptor*sortDescriptor=[NSSortDescriptor sortDescriptor with key:@“arrayKey”升序:YES];[请求集合描述符:@[sortDescriptor];[请求集合实体:父项];NSFetchedResultsController*aFetchedResultsController=[[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];n错误*错误=nil;我引用了你的密码。你不应该从我的答案中复制代码,因为代码直接来自你的问题。