MagicalRecord创建不会保存新数据对象。

时间:2014-09-09 07:09:44

标签: ios core-data magicalrecord

我有这段代码:

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

我在魔法记录的代码库中挖了一下,并且在调用inContext:方法时发生错误。结果返回一个nil对象。我在网上搜索过但无法找出问题所在。 HLMReferenceData类映射到数据模型中的单个表,没有指向其他表的链接。该类中的所有字段都会填充。

我很茫然。

1 个答案:

答案 0 :(得分:2)

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

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
    HLMReferenceData *referenceDataObj = [HLMReferenceData createEntityInContext:localContext];
    referenceDataObj.name = @"foo";
    // Continue setting up referenceDataObj here ....
} completion: NULL];

在“保存”下,您可以在Magical Record的github文档中看到一个非常相似的示例。请参阅MagicalRecord 2.3.0'

中的子节'保存更改

https://github.com/magicalpanda/MagicalRecord/blob/develop/Docs/Saving.md