从自定义框架访问 Coredata 时应用程序崩溃

Posted

技术标签:

【中文标题】从自定义框架访问 Coredata 时应用程序崩溃【英文标题】:Application crash when accessing Coredata from Custom Framework 【发布时间】:2016-08-25 06:48:15 【问题描述】:

我已将所有业务逻辑移至自定义框架项目。作为其中的一部分,我将 xcdatamodeld 也移到了框架项目中。即使我已将核心数据模型移至框架项目,当我尝试从以下给出的框架中访问核心数据模型对象时,应用程序也会崩溃。

- (NSManagedObjectModel *)managedObjectModel 
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
if (_managedObjectModel != nil) 
    return _managedObjectModel;


NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"IHA" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

return _managedObjectModel;

在上述情况下发生的情况是 modelURL 变得为零。谁能建议我在自定义框架中使用 CoreData 的正确方法。

提前致谢。

【问题讨论】:

你在你的框架包中移动你的 momd 文件吗? 【参考方案1】:

由于您已将所有内容移至您的框架,您的 Core Data 模型不再位于应用程序的主包中,而是位于框架的包中。

为了从您的框架中获取该捆绑包,您可以执行以下操作之一

NSBundle *frameworkBundle = [NSBundle bundleForClass:[self class]]; // Only works if the current class is part of your framework
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.yourframework.identifier"];

然后

NSURL *modelURL = [frameworkBundle URLForResource:@"IHA" withExtension:@"momd"];

【讨论】:

谢谢。现在它解决了获取 NSBundle 引用的问题。但还有一个问题。我的框架项目中有 XCTestTarget。单元测试类是指 DBManagerClass。那里它崩溃了,但有以下异常。用于打开商店的模型与用于创建商店的模型不兼容, NSLocalizedFailureReason=创建或加载应用程序保存的数据时出错。 卸载您的应用,然后重试。每次更改模型时都必须这样做。 当我尝试使用单元测试用例时,它仍然崩溃。当一切都转移到框架项目时,有什么不同的方法可以用数据库操作方法编写测试用例吗?当尝试使用与主项目相同的单元测试用例时,它正在工作。仅在移至框架项目后才会发生此崩溃。 可能是的。你应该问一个关于这个问题的新问题,发布你的测试代码和崩溃日志 嗨 deadbeef,我也有同样的问题。我在 ios 12 上使用 Swift 4.2。你能告诉我如何从自定义框架加载模型吗?我在自定义框架中有我的 xcdatamodeld。

以上是关于从自定义框架访问 Coredata 时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:访问 NSManagedObject 属性时应用程序崩溃

UIView:从自定义 XIB 加载导致崩溃

为啥 Core Data 获取请求从自定义 UITableViewCell 返回空?

我可以从自定义 Web 应用程序访问 HDFS 文件吗

从自定义 mojo 访问 maven 插件的运行时配置的最佳方式?

当我从自定义面板看到节点时,Drupal 统计信息不计算访问次数