我有一个核心数据对象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
的定义,所以我不确定为什么甚至可能会加载冲突。答案 0 :(得分:8)
我遇到过这种情况,这是一个确切的框架(该类被称为Broadcaster
)。在这种情况下,私有Message
框架由MessageUI
链接,此框架提供Account
实现。
您可以通过创建新项目来验证MessageUI框架是否加载Account
类,并在应用委托的application:didFinishLaunchingWithOptions:
方法中添加以下代码:
NSString *account = @"Account";
Class accountClass = NSClassFromString(account);
NSLog(@"accountClass = %@",accountClass);
在新项目中,这将打印accountClass = (null)
,但在添加MessageUI后,它将打印accountClass = Account
。
此外,如果您在私有class-dump
框架上使用Message
,则会看到Account
的接口声明。
现在,您在帖子中列出了5个项目作为问题,我将尝试解决这些问题
Message
框架是弱链接的,因此在链接时不会导致重复的符号错误。Message
框架中。#import
,但是在
运行时,所有类都加载了您的应用程序和那里
没有“可见性”或类似于运行时强制执行的任何内容。就行动方案而言,我只是将我的模型类重命名为具有前缀。我不知道任何其他解决方案。
答案 1 :(得分:0)
消息框架可能根本不是问题。像这样的东西会随着核心数据意外发生,例如当您以某种方式更改模型时。尝试清理构建,删除模拟器/硬件安装的测试应用程序,然后再次运行。我认为geraldWilliam建议重命名的原因是解决这个问题,但可能没有必要重命名