从另一个 NSManagedObjectContext 获取 NSManagedObject(引用相同的 NSPersistentStoreCoordinator)

Posted

技术标签:

【中文标题】从另一个 NSManagedObjectContext 获取 NSManagedObject(引用相同的 NSPersistentStoreCoordinator)【英文标题】:Getting NSManagedObject from another NSManagedObjectContext (referring the same NSPersistentStoreCoordinator) 【发布时间】:2010-01-09 10:51:45 【问题描述】:

我有两个不同的 NSManagedObjectContexts 都引用同一个 NSPersistentStoreCoordinator,比如 context1 和 context2。

我有一个不属于 context1 的 NSManagedObject。由于我想编辑它,不知道之后是否会保存它,我想从 context2 中获取该对象。在我不想保存 NSManagedObject 的情况下,Context2 可能会被丢弃。在保存的情况下,我会将 context2 合并到 context1 中。

但是如何从 context2 中获取对象?有没有一种简单的方法可以做到这一点,还是我必须使用谓词 xyz=[NSManagedObject objectId] 来请求对象?在这种情况下,xyz 必须是什么?

【问题讨论】:

【参考方案1】:

你可以指定目标NSManagedObjectContext,即

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    myArray = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

补充您的评论:

context2object = [myEntityArrayFromContext2 objectAtIndex:[myEntityArrayFromContext1 indexOfObject:context1object]];

【讨论】:

对。这就是我从 context1 获取托管对象所做的。但现在用户决定编辑该对象。这就是为什么我需要来自 context2 的相同对象的原因。那我怎么得到呢?通过objectID? 我不确定您是否知道我的意思;)我使用上面的代码获得了所有对象。它返回了一个包含 5 个“MyEntity”类型的对象的数组。到目前为止清楚。现在我以该数组中的第三个元素为例。这个元素当然是“MyEntity”类的一个对象。现在我的问题是我试图在上面提出:如何从 contexts2 中获取类类型“MyEntity”的第三个对象?或更笼统地说:如何将现有的 NSManagedObject 关联到另一个上下文?

以上是关于从另一个 NSManagedObjectContext 获取 NSManagedObject(引用相同的 NSPersistentStoreCoordinator)的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Interface Builder 的 XIB 传递 NSManagedObjectContext

ios核心数据 - 将实体记录复制到另一个实体

iOS - 核心数据 - NSManagedObjectContext - 不确定是不是保存

在 swift 3 中获取相关表

从另一个服务启动服务

从另一个存储过程 oracle 调用存储过程