Ios ManagedObject在保存后没有上下文

Ios ManagedObject在保存后没有上下文,ios,core-data,Ios,Core Data,这是一个背景线程。它是一个私有并发类型上下文,在上下文performBlock中执行。我做对了,至少我认为我是这样 我不是一个核心数据的初学者,但是我可能会错过一些明显的东西——因为我已经盯着这段时间了 代码如下: FFXCollection *backgroundCollection = (FFXCollection *) [context objectWithID:collectionID]; //At this point backgroundCollection.managedObje

这是一个背景线程。它是一个私有并发类型上下文,在上下文performBlock中执行。我做对了,至少我认为我是这样

我不是一个核心数据的初学者,但是我可能会错过一些明显的东西——因为我已经盯着这段时间了

代码如下:

FFXCollection *backgroundCollection = (FFXCollection *) [context objectWithID:collectionID];

//At this point backgroundCollection.managedObjectContext is the same as context

NSError *error = nil;
[context save:&error];
NSLog(@"error %@", error); //Note that there is no error here

if (!backgroundCollection.managedObjectContext) {
DLog(@"why not?"); //At this point the managedObjectContext is nil!!!
}
为什么managedObjectContext在托管对象内变为零

这个例子是虚构的,但却说明了我的问题。在我的代码中,保存发生,然后我试图建立一种关系。然后,当发生另一次保存时,由于上述原因,我会得到一个验证错误


谢谢

请改用现有的objectwithid

existingObjectWithID:错误:返回指定ID的对象

  • (NSManagedObject*)existingObjectWithID:(NSManagedObjectID)objectID错误:(NSError*)错误参数objectID请求对象的对象ID。如果检索时出现问题,则出错 objectID指定的对象在返回时包含一个错误 描述问题。返回objectID指定的对象的值。 如果对象无法获取,或不存在,或无法 如果出现故障,则返回nil
讨论 如果上下文中已经注册了具有给定ID的托管对象,则直接返回该对象;否则 相应的对象在上下文中出错。

如果数据未缓存,此方法可能会执行I/O

与objectWithID:不同,此方法从不返回错误

在OS X v10.6及更高版本中提供可用性。另见- objectWithID:–objectRegisteredForID:在中声明 NSManagedObjectContext.h


如果您忽略我所说的关于关系的部分,只阅读上面的代码,那么我所做的就是加载一个对象,保存上下文,然后它的上下文为零。此示例代码中没有关系。是否从ID加载?你从哪里弄来的身份证?尝试先获取对象,然后保存它。可能id正在更改。很酷,可以使用!。。。现在我需要找出原因。objectWithID未引发异常。它们都返回一个对象。FFXCollection加载到主上下文中的主线程上,它将其objectID传递给新创建的后台上下文,以将数据从网络加载到其中。加载数据后,它们将与FFXCollection关联,并返回到主线程进行刷新。感谢这些文档,但是我已经阅读了这些文档,它不再清晰了。这两种方法都返回对象,但是在立即保存背景上下文后,使用objectWithID会中断对象与上下文的关系。而现有的ObjectWithId则没有。我需要知道这背后的根本原因。我是否遗漏了一些明显的内容?保存后是否从上下文中删除了有故障的对象?