0

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

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

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

该应用程序崩溃说:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“executeFetchRequest:错误:获取请求必须具有实体。”


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

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

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

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

感谢任何帮助以解决它

4

1 回答 1

0

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

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

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

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

于 2015-12-06T13:00:26.027 回答