美文网首页
iOS CoreData: error: Failed to

iOS CoreData: error: Failed to

作者: maskerII | 来源:发表于2020-10-22 17:20 被阅读0次

在APP内调用framework里的CoreData的相关方法,报错CoreData: error: Failed to load model named

framework中CoreData相关代码如下

- (NSManagedObjectModel *)managedObjectModel {
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"EDriveData" withExtension:@"momd"];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return managedObjectModel;
}

[[NSBundle mainBundle] URLForResource:@"EDriveData" withExtension:@"momd"]; 返回nil

有以下两种可能
1.xcdatamodel的资源copy到bundle里
解决办法


image.png
  1. [NSBundle mainBundle] 返回bundle 是App Bundle,而xcdatamodel文件是在framework bundle 下,framework bundle里的文件并没有暴露出来,所以在App Bundle里找不到文件
    解决办法
    在framework里 使用 [NSBundle bundleForClass:[self class]] 来获取当前framework的 Bundle

扩展
bundleForClass 返回的bundle 是哪个?
分别在app,framework(dynamic library),static lib中定义了三个类,并调用bundleForClass方法输出,结果如下:

app - app bundle

framework - framework bundle

static lib - app bundle

再将framework build setting中的Mach-O Type改为static library,结果如下

app - app bundle

framework - app bundle

static lib -app bundle

所以只要是静态库,都属于官方说明中的最后一种情况:
the main bundle object if a Class was not dynamically loaded or is not defined in a framework.

参考资料

bundleForClass的返回 https://www.jianshu.com/p/bc9826a71a81

iOS 把库(sdk)中的图片资源打包 成.bundle https://www.jianshu.com/p/9318c91c852d

相关文章

网友评论

      本文标题:iOS CoreData: error: Failed to

      本文链接:https://www.haomeiwen.com/subject/folpmktx.html