Ios MagicalRecord创建赢得';无法保存新的数据对象。

Ios MagicalRecord创建赢得';无法保存新的数据对象。,ios,core-data,magicalrecord,Ios,Core Data,Magicalrecord,我有以下代码: HLMReferenceData *referenceDataObj = [HLMReferenceData createEntity]; [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){ HLMReferenceData *localReferenceData = [referenceDataObj inContext:localContext]; // Setup loc

我有以下代码:

HLMReferenceData *referenceDataObj = [HLMReferenceData createEntity];
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
    HLMReferenceData *localReferenceData = [referenceDataObj inContext:localContext];
    // Setup localReferenceData here ....
}
                  completion:NULL];
据我所知,这与网上关于如何使用MagicalRecord创建新记录的示例完全一致。但是,它不起作用。我在日志中看到:

... +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x3abdc4) Error Message: The operation couldn’t be completed. (Cocoa error 133000.)
... +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x3abdc4) Error Domain: NSCocoaErrorDomain
... +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x3abdc4) Recovery Suggestion: (null)
... -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x954b680) NO CHANGES IN ** UNNAMED ** CONTEXT - NOT SAVING
我已经在Magic Record的代码库中搜索过了,当调用
inContext:
方法时会发生错误。它返回一个nil对象作为结果。我已经在网上搜索过了,但还没有找到问题所在。
HLMReferenceData
类被映射到数据模型中的一个表,没有到其他表的链接。将填充类中的所有字段


我不知所措

inContext:
返回nil,因为您的对象是在外部上下文中创建/插入的,从未保存过。因此,它在
localContext
中尚不可访问。(更具体地说,inContext:将尝试使用临时objectID查找对象,但找不到。)您应该在保存块中创建/插入对象,如下所示:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
    HLMReferenceData *referenceDataObj = [HLMReferenceData createEntityInContext:localContext];
    referenceDataObj.name = @"foo";
    // Continue setting up referenceDataObj here ....
} completion: NULL];
您可以在Magic Record的github文档的“保存”下看到一个非常类似的示例。参见“MagicalRecord 2.3.0中保存的更改”小节


你在使用MR速记吗?嗯,这适用于我的一些非常简单的案例。但这对其他人不起作用。我需要能够执行
[MyClass createEntity]
,使用该对象,然后将其保存到另一个类中。有什么建议吗?我不太清楚你想做什么,或者你说的“以后在另一个类中保存”是什么意思。你是说在另一个上下文中保存?您可以延迟保存任意时间,但最终需要在发生插入或更改的上下文中保存任何插入或更改。未保存的插入和更改在上下文中不可见。这就是问题所在。创建对象的开发人员不知道上下文。最后,我停止使用saveWithBlock,改为在持久存储级别保存。解决了所有问题。