Core data 插入实体时核心数据取存关系(同时)

Core data 插入实体时核心数据取存关系(同时),core-data,insert,many-to-many,entity,relationships,Core Data,Insert,Many To Many,Entity,Relationships,这里的第一个问题,我已经尝试了很多东西,但都想不出来。 具有两个实体的核心数据,两个实体之间有到多个关系 AB A实体将名称作为属性,并具有关系Bs 第一个控制器列出所有A实体,我有第二个控制器添加A实体,我想让它在其关系中保存默认B 在准备阶段,我有以下代码: if ([[segue identifier] isEqualToString:@"addAEntitySegue"]) { AddAEntityViewController *addAEntityViewController

这里的第一个问题,我已经尝试了很多东西,但都想不出来。
具有两个实体的核心数据,两个实体之间有到多个关系

AB

A
实体将名称作为属性,并具有关系
Bs

第一个控制器列出所有
A
实体,我有第二个控制器添加
A
实体,我想让它在其关系中保存默认
B

在准备阶段,我有以下代码:

if ([[segue identifier] isEqualToString:@"addAEntitySegue"]) {

    AddAEntityViewController *addAEntityViewController = [segue destinationViewController];
    addAEntityViewController.delegate = self;
    addAEntityViewController.managedObjectContext = self.managedObjectContext;

    NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    self.addingManagedObjectContext = addingContext;

    [addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];

   addAEntityViewController.A = [NSEntityDescription insertNewObjectForEntityForName:@"A" inManagedObjectContext:addingContext];

    UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave
                                                                           target:addAEntityViewController
                                                                               action:@selector(save:)];
    addAEntityViewController.navigationItem.rightBarButtonItem = saveButton;

}
在addAEntityViewController中,我有这个要保存

-(IBAction)save:(id)sender
{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"B"                                                    inManagedObjectContext:self.managedObjectContext];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",[defaults objectForKey:@"BDefault"]];

    [fetchRequest setEntity:entity];
    [fetchRequest setPredicate:predicate];

     //Set the batch size to a suitable number
    [fetchRequest setFetchBatchSize:20];
    NSError *error;

    self.A.name = textFieldVal;

    [self.A addBObject:[[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] objectAtIndex:0]];

    NSLog(@"A = %@", self.A.Bs);

    [self.delegate addAEntityViewController:self didFinishWithSave:YES];
}
addAEntityViewController
中,所有内容都正确保存,即使是
NSLog(@“A=%@”,self.A.Bs)语句显示
B
。但是,当代理保存在第一个控制器(
AEntityViewController
)中时,它只保存
A.name
,而不保存关系
A.Bs
,我无法找出问题所在

以下是委托方法:

-(void) addAEntityViewController:self didFinishWithSave:YES{
if (save) {
    NSLog(@"saveworkouts");

    NSError *error;
    if (![addingManagedObjectContext save:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }
}

// release the adding managed object context
self.addingManagedObjectContext = nil;
}

就像我说的,它保存
A
实体,但不保存与
B
的关系,即使与
B
的关系正确保存在
addAEntityViewController
(第二个视图)中。
A.Bs
NSLOg
为空

首先我相信这句话:
addAEntityViewController=self.managedObjectContext
应该是:
addAEntityViewController.managedObjectContext=self.managedObjectContext

但这也是错误的。
它应该获得您随后创建的
addingContext

addAEntityViewController.managedObjectContext=addingContext


我有点惊讶,你的应用程序没有崩溃,因为你正在混合来自两个不同上下文的托管对象。

你仍然在
addAEntityViewController
中使用错误的上下文,它应该设置为
addingContext
(上下文实体a是在中创建的)A实体在managedObjectContext中设置,但在委托将其插入addingContext之前不会插入,这应该可以。保存A.name没有问题。A.Bs关系也不能插入。我有一种感觉,在实体被保存之前,关系是不会被插入的。这就是我想要澄清的。在第一个视图控制器的
managedObjectContext
中获取Bs实体。要证明这一点,请使用快速修复程序:而不是
[self.A addboobject:[[self.managedObjectContext executeFetchRequest:fetchRequest error:&error]objectAtIndex:0]]使用
[self.A addboobject:[[self.A.managedObjectContext executeFetchRequest:fetchRequest错误:&error]objectAtIndex:0]]