从自定义框架访问 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 属性时应用程序崩溃
为啥 Core Data 获取请求从自定义 UITableViewCell 返回空?