Core data NSManagedObject属性重置为零

Core data NSManagedObject属性重置为零,core-data,nsmanagedobject,uimanageddocument,Core Data,Nsmanagedobject,Uimanageddocument,我正在创建一个NSManagedObject子类(组),设置一些属性/属性,然后将其传递到另一个对象(存储在strong属性中)。此对象获取一些组信息,并通过GCDAsyncSocket实例将其发送到服务器。服务器响应一些信息,然后我想将这些信息存储为组的属性。但是,当服务器响应并调用GCDAsyncSocket的委托时,所有组的属性都设置为nil 由于我正在使用UIManagedDocument实现我的核心数据,当自动保存开始时,我得到以下错误: 错误域=NSCOCAERRORDOMAIN C

我正在创建一个NSManagedObject子类(
),设置一些属性/属性,然后将其传递到另一个对象(存储在
strong
属性中)。此对象获取一些
信息,并通过
GCDAsyncSocket
实例将其发送到服务器。服务器响应一些信息,然后我想将这些信息存储为
组的属性。但是,当服务器响应并调用
GCDAsyncSocket
的委托时,所有
组的属性都设置为
nil

由于我正在使用
UIManagedDocument
实现我的核心数据,当自动保存开始时,我得到以下错误:

错误域=NSCOCAERRORDOMAIN Code=134030“无法执行该操作。” 已完成。(可可错误134030。)“用户信息=0x1f5c96f0 {NSAffectedObjectsErrorKey=( “(实体:集团;id:0x1f5c73b0; 数据:{})”,NSUnderlyingException=无法 更新从未插入的对象。}

但是,我知道对象已插入。它做了一些研究,发现了许多与使用两个或多个不同的托管对象上下文相关的问题,但这不是我的问题(因为我唯一得到的托管对象上下文来自
UIManagedDocument

一些代码:

@property(nonatomic, strong) Group *currentGroup;

// ....

- (void)storeGroupOnServer:(Group *)group {
    self.currentGroup = group;
    NSLog("%@", self.currentGroup); // correct value for name attribute
    [self.currentGroup addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];

    // do some other things, unrelated to this problem
    // write data to socket
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    // This method is called before the socket returns with response data

    NSLog(@"%@", (Group *)object.name); // incorrect value for name attribute (nil)
    NSLog(@"%@", self.currentGroup); // same as above
}

有谁知道我做错了什么吗?

self.group
和self.currentGroup
之间有什么区别?在提取过程中是否重置了您的上下文?在哪个线程上设置了
self.group.name
?很抱歉,
self.group
应该是
self.currentGroup
,现在已修复。据我所知,上下文没有被重置(内存位置始终保持不变)。我认为这是一个线程问题,但在调用这些调用时,查看堆栈跟踪,它们都显示在“线程1”下。您是否在setCurrentGroup:上设置了断点,以查看它是否被意外修改?您能否比较托管对象的objectID(前后),以确保它是同一个对象?