【问题标题】:MagicalRecord creating won't save new data object.MagicalRecord 创建不会保存新的数据对象。
【发布时间】:2014-09-09 07:09:43
【问题描述】:

我有这个代码:

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

我在 Magical Record 的代码库中进行了挖掘,当调用 inContext: 方法时出现错误。它返回一个 nil 对象作为结果。我在网上搜索过,但无法弄清楚出了什么问题。 HLMReferenceData 类映射到数据模型中的单个表,没有到其他表的链接。类中的所有字段都会被填充。

我很茫然。

【问题讨论】:

  • 你在使用 MR 速记吗?

标签: ios core-data magicalrecord


【解决方案1】:

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

[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

【讨论】:

  • 嗯,这适用于我的一些非常简单的情况。但这对其他人不起作用。我需要能够做到[MyClass createEntity],使用该对象,然后稍后将其保存在另一个类中。有什么建议吗?
  • 我不太确定您要做什么,或者您所说的“稍后在另一堂课中保存”是什么意思。你的意思是把它保存在另一个上下文中?您可以根据需要推迟保存,但最终您需要在它们发生的上下文中保存任何插入或更改。未保存的插入和更改将在上下文中不可见。
  • 这就是问题所在。创建对象的开发人员不知道上下文。最后我只是停止使用 saveWithBlock 并改为在持久存储级别保存。解决了一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2017-05-20
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多