![](/img/trans.png)
[英]Cannot access storyboard in resource bundle file inside iOS static library
[英]How to access Bundle from iOS static library
我正在使用Core Data框架开发静态库。 可悲的是,我无法访问生成的Bundle / .momd文件。
我所做的:
我的无效代码:
NSString *staticLibraryBundlePath = [[NSBundle mainBundle] pathForResource:@"sdkResources" ofType:@"bundle"];
NSURL *staticLibraryMOMURL = [[NSBundle bundleWithPath:staticLibraryBundlePath] URLForResource:@"Model" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:staticLibraryMOMURL];
返回值:
[FAILED], NSInvalidArgumentException "Cannot create an NSPersistentStoreCoordinator with a nil model" raised
问题似乎是对“ mainBundle”的访问,因为当我运行sdk测试时,以下代码正在运行(至少没有错误)
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSURL *staticLibraryMOMURL = [bundle URLForResource:@"Model" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:staticLibraryMOMURL];
但是,当我想在另一个应用程序(使用podFile文件)中使用我的sdk时,我无法访问我的包并收到相同的错误:/
我已经阅读并尝试了很多,但似乎没有任何效果。 我在iOS开发人员中没有太多经验,我正在尽力了解正在发生的事情,但是现在这对我来说是死胡同:(
问候
我不知道为什么sdkResources.bundle是红色的。希望这就是您要的内容,谢谢。
编辑:修复sdkResources.bundle的路径后
编辑:
好的,我真的很接近解决方案,我的捆绑包已成功复制到我的最终App中,但我无法访问我的模型,并且仅在使用[NSBundle bundleForClass:[self class]]的sdk测试中可用而不是[NSBundle mainBundle]。 这可能只是一个愚蠢的配置,但是..是的..我会继续挖掘!
好,我知道了 !
经过(许多)小时的搜索,将我的模型放入捆绑包中后,我决定将其保留在sdk中,并检查我的podspec配置(因为它在sdk测试中有效,但在最终项目中无效)
这是我的解决方案,在我刚刚添加的podspec文件中:
s.resources = 'sdk/**/*.{xcdatamodeld,xcdatamodel}'
s.preserve_paths = 'sdk/**/*'
s.framework = 'CoreData'
基本上,我只是将模型添加为资源和CoreData框架。 至少我学到了很多关于Bundle和podspec配置的知识...
如果为红色,则文件不存在。 如果确定存在,请删除红色文件,然后再次添加:这可能是错误配置的文件链接
编辑添加:通常,您必须先构建库才能生成文件。 该库有目标吗? 如果是这样,请选择它,进行构建,然后再切换回您的项目
从屏幕截图中可以看到,虽然捆绑包是要复制的,但它不存在。
=>很好,稍后可能会构建
但
正如我们还可以看到sdk目标与sdkResoures无关。
捆绑不是及时建立的
将其设置为在方案中构建不会这样做 (方案为时已晚!)
目标需要取决于捆绑包目标
我认为,如果您不使用Pods并仅使用框架,则解决方案可能会简单得多。 你将不得不改变Bundle
你正在寻找您的momd
英寸
请在这里查看这篇文章
提出的解决方案是
lazy var managedObjectModel: NSManagedObjectModel = {
// The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
let carKitBundle = NSBundle(identifier: "com.andrewcbancroft.CarKit")
let modelURL = carKitBundle!.URLForResource("CarModel", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()
com.andrewcbancroft.CarKit
此处是框架的捆绑包标识符,即包含要从代码访问的momd
文件的捆绑包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.