1

我正在创建一个 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
}

有人知道我在这里做错了什么吗?

4

0 回答 0