【发布时间】:2012-09-25 02:54:28
【问题描述】:
我有一个核心数据对象Account,表示为NSManagedObject 的子类:
@interface Account : NSManagedObject
我的整个应用程序一直开发得很好,但是,当我添加 MessageUI.framework 以便我可以获得一个撰写电子邮件视图控制器时,一切都崩溃了。该应用程序可以正常链接和编译,并且运行良好。直到,也就是说,我开始与我以前工作的 Account 对象进行交互。然后,我开始得到这些:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: '"Account" is not a subclass of NSManagedObject.'
*** First throw call stack:
(0x202b012 ... 0x2385)
libc++abi.dylib: terminate called throwing an exception
其中一个特殊的原因是:
// we need to insert a new account
Account *newAccount = [NSEntityDescription
insertNewObjectForEntityForName:[Account entityName]
inManagedObjectContext:self.managedObjectContext];
现在,我猜测MessageUI.framework 中的某个类导致了冲突,但我有几个问题:
- 应用编译和运行正常,没有编译时名称冲突
- 框架中的其他组件似乎是前缀命名空间(即:
MFMailComposeViewController),那么理论上的帐户应该不是MFAccount? - 我什至没有做
#import <MessageUI/MessageUI.h>或更紧的#import <MessageUI/MFMailComposeViewController.h>,我检查了后者并没有看到Account的定义,所以我不确定为什么甚至会加载可能的冲突. - 为了确定,我重新生成了我的 Core Data 类,并重置了所有模拟器设置,仍然没有骰子。
- 从项目中删除框架并构建设置可立即解决此问题。
【问题讨论】:
-
你试过重命名你的 NSManagedObject 子类吗?
-
@geraldWilliam:虽然我认为这将解决这种情况,但如果没有必要,我宁愿不命名我的模型。我真的问这个问题是因为我想知道我错过了什么,因为我所有的调查都导致了死胡同,如果这种情况或类似情况再次出现,我希望能够解决它快速且凭直觉。
-
当然有道理。只是当我遇到类似的情况时,我将托管对象子类命名为“消息”,我只是将其重命名,问题就解决了。展望未来,我只是用前缀命名我的所有托管对象子类以避免这个问题。
-
@Josh 是否为您的模型对象名称添加前缀解决了这个问题?
-
@CarlVeazey:经过一些进一步的徒劳研究,我确实最终给它们加上了前缀。谢谢!
标签: objective-c ios xcode nsmanagedobject messageui