我有一对多的关系,我成功地将数据放入其中。问题是我无法通过关系属性获取它。
我的ADD代码:
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];
答案 0 :(得分:0)
您的orders
关系与UnsyncedOrders
的特定实例相关。但是,当您尝试执行提取时,请执行以下操作:
NSEntityDescription *parent = [NSEntityDescription entityForName:@"UnsyncedOrders"
inManagedObjectContext:context];
[...]
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orders == %@", parent];
[fetchRequest setPredicate:predicate];
您正在尝试获取orders
关系指向UnsyncedOrders
实体本身的实例,而不是那些与UnsyncedOrders
的特定实例相关的实例。那总是会失败的。事实上,如果您检查performFetch:
的结果是否正在返回NO
并提供某种描述问题的错误,则很有可能。
如果要获取与UnsyncedOrderItems
的特定实例相关的UnsyncedOrders
,则需要使用引用特定实例的谓词。但是,如果您已经拥有该实例,则无需提取 - 只需向UnsyncedOrders
实例询问其items
关系的值。
答案 1 :(得分:0)
这是我最终使用的解决方案:
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];
}