加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – iOS – 核心数据模型与Mail Framework冲突?

发布时间:2020-12-14 19:58:30 所属栏目:百科 来源:网络整理
导读:我有一个Core Data对象Account,表示为NSManagedObject的子类: @interface Account : NSManagedObject 我的整个应用程序开发得很好,但是,当我添加MessageUI.framework以便我可以获得一个撰写电子邮件视图控制器时,所有的地狱都会崩溃.该应用程序链接和编译很
我有一个Core Data对象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类,并重置了所有模拟器设置,仍然没有骰子.
>从项目中删除框架并立即构建设置可以解决问题.

解决方法

我已经遇到过这种情况,这是一个确切的框架(这个类叫做Broadcaster).在这种情况下,私有Message框架由MessageUI链接,并且此框架提供Account实现.

您可以通过创建新项目来验证MessageUI框架是否加载了Account类,并在app delegate的应用程序中:didFinishLaunchingWithOptions:方法,添加以下代码:

NSString *account = @"Account";
Class accountClass = NSClassFromString(account);
NSLog(@"accountClass = %@",accountClass);

在一个新项目中,这将打印accountClass =(null),但在添加MessageUI后,它将打印accountClass = Account.

此外,如果您在私有Message框架上使用class-dump,您将看到Account的接口声明.

现在,您在帖子中列出了5个项目作为问题,我将尝试解决它们

>我对链接时间流程的了解不够了解
框架要肯定,但我怀疑Message框架是弱链接的,因此在链接时不会导致重复的符号错误.
>面向公众的人名称正确但有些没有证件
有些不是.此外,冲突的类位于私有Message框架中.
>那根本不重要.编译器将使用#import,但at
运行时,所有类都加载了您的应用程序
没有“可见性”或类似于运行时强制执行的任何内容.
> N / A.
>与其他证据一致

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读