【问题标题】:Corrupted (Old) name of an entity - CoreData实体的损坏(旧)名称 - CoreData
【发布时间】:2015-12-06 04:47:30
【问题描述】:

我遇到以下问题:我有一个名为 Chat 的模型需要更新为 Conversation(仅用于助记问题)。尽管我在 xcdatamodel 文件上更改了您的名称,但生成的文件仍然是 Chat。

鉴于此,我决定返回并:“好吧,保持原样并再次使用 Chat”,但是当我尝试对 Chat 模型进行一些操作时:

Chat * chat = [Chat MR_findFirstByAttribute:@"cId" withValue:convId];

应用程序崩溃说:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“executeFetchRequest:error: A fetch request must have an entity.”


我假设相关 NSManagedObject 的实体名称存在内部错误,导致应用程序崩溃。

我尝试删除 Chat 和 Chat+CoreDataProperties 文件并生成具有正确名称(对话)的新文件,并且我还发现 xcdatamodel 中存在对 Chat 名称的引用(我已经打开它作为源文件)在键下

<entity name="Conversation" representedClassName="Chat" syncable="YES">

当我将其更改为对话时,行为再次相同。

感谢任何帮助解决它

【问题讨论】:

  • 虽然我是一位专门研究古代和人工语言的语言学家,但我无法理解您问题的前两段。您在断章取义地使用名词和动词。这可能是机器翻译吗?

标签: ios core-data nsmanagedobject magicalrecord xcdatamodel


【解决方案1】:

MagicalRecord 框架假定类名和实体名相同。你可以

  • 通过将所有对“聊天”的引用更改为“对话”来使用新实体名称,这可以通过简单的全局文本替换来完成。

  • 放弃 MagicalRecord 并使用您自己的核心数据堆栈。然后,您可以随意摆弄模型、实体和类名称的非标准模式。

一般来说,如果您选择使用第三方框架,则必须根据其要求调整您的习惯。这个特殊要求并不明显,但从您的错误中可以明显看出,不一致的实体/类名称会导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2011-01-31
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多