Ios 建立关系的非法企图';对象';在不同上下文中的对象之间

Ios 建立关系的非法企图';对象';在不同上下文中的对象之间,ios,core-data,nsmanagedobject,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我知道有几个问题可能是重复的,但是,没有针对性的解决方案解决了我的问题,所以我决定发布我的具体案例 我在我的应用程序中使用CoreData,一些对象被实例化而没有有效地保存在地面上,我在这些情况下的启动代码如下: -(id)initEntity:(NSManagedObjectContext*)context{ AppDelegate appDelegate * = [[UIApplication sharedApplication] delegate]; NSEntityDes

我知道有几个问题可能是重复的,但是,没有针对性的解决方案解决了我的问题,所以我决定发布我的具体案例

我在我的应用程序中使用CoreData,一些对象被实例化而没有有效地保存在地面上,我在这些情况下的启动代码如下:

-(id)initEntity:(NSManagedObjectContext*)context{
    AppDelegate appDelegate * = [[UIApplication sharedApplication] delegate];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Endereco" inManagedObjectContext: appDelegate.managedObjectContext];
    self = (Endereco*)[[Endereco alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];

    return self;
}
但是,此对象的属性是已保存在基础上的市镇,并由操作表选择:

if (actionSheet == actionSheetMunicipios) {
        Municipio *municipio = [municipios objectAtIndex:buttonIndex-1];

        endereco.municipio = municipio;
        [textMunicipio setText:endereco.municipio.nome];
    }
一致

endereco.市政=市政

我得到以下错误:

***由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“非法尝试建立 不同上下文中对象之间的“市政”关系


错误很明显,我正在尝试建立具有不同上下文的对象之间的关系,但在我的情况下,如果父对象未保存在基础上,并且子对象已经存在,我如何解决呢?

您的评论似乎表明您知道答案。将
endereco
添加到上下文中(使用
insertIntoManagedObjectContext:context
而不是
insertIntoManagedObjectContext:nil
)。这不是被拯救的问题;您需要确保这两个对象位于相同的上下文中。这是没有办法的。您不能在属性中创建跨上下文关系(您可以在获取的属性中创建跨上下文关系,但这很复杂,而且在您需要的情况下,这似乎不是一种情况)。

您的注释似乎表明您知道答案。将
endereco
添加到上下文中(使用
insertIntoManagedObjectContext:context
而不是
insertIntoManagedObjectContext:nil
)。这不是被拯救的问题;您需要确保这两个对象位于相同的上下文中。这是没有办法的。您无法在属性中创建跨上下文关系(您可以在获取的属性中创建跨上下文关系,但这很复杂,而且这似乎不是您想要的情况)。

我通过在市政的managedContext中添加Endereco解决了此问题:

   if (actionSheet == actionSheetMunicipios) {
        Municipio *municipio = [municipios objectAtIndex:buttonIndex-1];
        [municipio.managedObjectContext insertObject:endereco];
        [endereco setMunicipio:municipio];
        [textMunicipio setText:endereco.municipio.nome];
    }

我不知道这是否是最好的解决方案,但在这种情况下效果非常好。

我设法通过在市政管理上下文中添加Endereco来解决问题:

   if (actionSheet == actionSheetMunicipios) {
        Municipio *municipio = [municipios objectAtIndex:buttonIndex-1];
        [municipio.managedObjectContext insertObject:endereco];
        [endereco setMunicipio:municipio];
        [textMunicipio setText:endereco.municipio.nome];
    }

我不知道这是否是最好的解决方案,但在这种情况下效果很好。

朋友,谢谢你的帮助,但我可以在我的答案中找到其他解决方案。朋友,谢谢你的帮助,但我可以在我的答案中找到其他解决方案。