8

我有一个核心数据对象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导致了冲突,但我有几个问题:

  1. 该应用程序编译并运行良好,没有编译时名称冲突
  2. 框架中的其他组件似乎是前缀命名空间(即:)MFMailComposeViewController,那么理论上的帐户不应该是MFAccount吗?
  3. 我什至没有做 an#import <MessageUI/MessageUI.h>或稍微紧一点#import <MessageUI/MFMailComposeViewController.h>的 ,我检查了后者并没有看到 的定义Account,所以我不确定为什么甚至会加载可能的冲突。
  4. 可以肯定的是,我重新生成了我的核心数据类,并重置了所有模拟器设置,仍然没有骰子。
  5. 从项目中删除框架并构建设置会立即解决问题。
4

2 回答 2

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 个问题作为问题,我将尝试解决它们

  1. 我对使用框架的链接时过程了解不多,可以肯定地说,但我怀疑Message框架链接较弱,因此不会在链接时导致重复符号错误。
  2. 面向公众的名称正确,但一些未记录的名称却没有。此外,冲突的类在私有Message框架中。
  3. 那根本不重要。编译器将使用#import,但在运行时,所有类都与您的应用程序一起加载,并且在运行时没有“可见性”或类似的东西。
  4. 不适用
  5. 与其他证据一致

就行动方案而言,我只是将我的模型类重命名为具有前缀。我不知道任何其他解决方案。

于 2012-09-25T03:51:42.470 回答
0

消息框架可能根本不是问题。像这样的事情可能会在核心数据中意外发生,例如当您以某种方式更改模型时。尝试清理构建,删除您的模拟器/硬件安装的测试应用程序,然后再次运行。我认为 geraldWilliam 建议重命名它的原因是为了解决这个问题,但可能没有必要重命名任何东西

查看此线程:找不到实体的 NSManagedObjectModel

于 2012-09-25T03:49:22.087 回答