我正在创建一个 NSManagedObject 子类 ( Group
),设置一些属性/属性,然后将其传递给不同的对象(它存储在strong
属性中)。该对象获取一些Group
信息并通过GCDAsyncSocket
. 服务器响应一些信息,然后我想将这些信息存储为Group
. 但是,当服务器响应并GCDAsyncSocket
调用 的委托时,所有的Group
属性都设置为nil
。
由于我正在使用UIManagedDocument
我的核心数据实现,当自动保存启动时,我收到以下错误:
错误域=NSCocoaErrorDomain 代码=134030“操作无法完成。(Cocoa 错误 134030。)”UserInfo=0x1f5c96f0 {NSAffectedObjectsErrorKey=("<Group: 0x1f5aa300> (entity: Group; id: 0x1f5c73b0; data: {<entities)这里, nil values>})" ), 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
}
有人知道我在这里做错了什么吗?