Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从iOS静态库访问捆绑包_Ios_Core Data_Bundle - Fatal编程技术网

如何从iOS静态库访问捆绑包

如何从iOS静态库访问捆绑包,ios,core-data,bundle,Ios,Core Data,Bundle,我正在使用核心数据框架开发一个静态库。遗憾的是,我无法访问生成的Bundle/.momd文件 我所做的: 创建我的数据模型(Model.xcdatamodeld文件) 创建一个新的Bundle目标(名为sdkResources),在这里我在compilesources和linked CoreData.framework中添加了我的xcdatamodeld文件 在我的sdk目标中,我将sdkResources.bundle放在“复制捆绑资源”部分中 编辑我的sdk方案,并在build部分添加sd

我正在使用核心数据框架开发一个静态库。遗憾的是,我无法访问生成的Bundle/.momd文件

我所做的:

  • 创建我的数据模型(Model.xcdatamodeld文件)
  • 创建一个新的Bundle目标(名为sdkResources),在这里我在compilesources和linked CoreData.framework中添加了我的xcdatamodeld文件
  • 在我的sdk目标中,我将sdkResources.bundle放在“复制捆绑资源”部分中
  • 编辑我的sdk方案,并在build部分添加sdkResources目标
我的非工作代码:

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测试时,下面的代码正在工作(至少没有错误)

但是当我想在其他应用程序中使用我的sdk(使用podFile文件)时,我无法访问我的捆绑包,并得到相同的错误:/

我读了很多书,也尝试了很多,但似乎什么都不管用。我在iOS开发方面没有太多经验,我正在尽最大努力了解发生了什么,但这对我来说是一条死胡同:(

问候

  • 编辑/筛选我的项目配置

我不知道为什么sdkResources.bundle是红色的。。 希望这就是你想要的,谢谢

编辑:修复sdkResources.bundle的路径后

编辑:


好的,我非常接近解决方案,我的捆绑包已成功复制到我的最终应用程序中,但我无法访问我的模型,当我使用[NSBundle bundleForClass:[self class]]而不是[NSBundle mainBundle]时,它只在我的sdk测试中起作用。这可能只是一个愚蠢的配置,但..是的..我会继续挖掘!

如果它是红色的,则文件不存在。如果您确定它存在,请删除红色文件并再次添加:这可能是配置错误的文件链接


编辑添加:通常,您必须先构建库才能生成文件。是否有此库的目标?如果有,请选择它,构建,然后切换回您的项目。从屏幕截图中我们可以看到,虽然捆绑包是要复制的,但它不存在。
=>那很好,可能会在以后建造

但是

正如我们还可以看到的,sdk目标对sdkResoures没有依赖性。
捆绑包没有及时构建

将其设置为在方案中生成不会起作用(方案太晚了!)
目标需要依赖于捆绑目标

好的,我知道了

在(太)长时间的搜索之后,我决定将我的模型放在一个捆绑包中,然后检查我的podspec配置(因为它在我的sdk测试中工作,但在我的最终项目中不工作)

这是我的解决方案,在我刚刚添加的podspec文件中:

s.resources      = 'sdk/**/*.{xcdatamodeld,xcdatamodel}'
s.preserve_paths = 'sdk/**/*'
s.framework = 'CoreData'

基本上,我只是将我的模型添加为一个资源和核心数据框架。至少我学到了很多关于Bundle和podspec配置的知识…

我认为如果不使用Pods,只使用框架,解决方案可能会简单得多。 您必须更改要在中查找您的
momd
Bundle

请检查这篇文章

提出的解决方案是

    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
文件。在查找器中检查捆绑包是否已复制ok2.NSLog为staticLibraryBundlePath3.NSLog staticLibraryMOMURL返回的路径以检查是否为okSadly我在我的最终应用程序中找不到我的sdkResources.bundle的任何痕迹。我应该在哪里找到它,以及正确复制它的过程是什么?在我不工作的情况下,我的staticLibBundlePath和MOMRUL都是空的。在验证是否确实将其复制到正确的目标时,制作xcode的图片。检查inspector选项卡并检查t目标复制构建阶段当我创建包目标时,Xcode在我的“产品”中生成了一个“sdkResources.Bundle”文件组,但即使在成功构建捆绑包之后,其中的所有内容似乎都丢失了。是的,我的sdk和捆绑包都有一个目标。我的sdk需要捆绑包才能工作。文件是否存在于您认为存在的位置?如果存在,请链接到它。红色链接表示文件未找到。当我在产品组中单击sdkResources.bundle时,我会可以看到“完整路径”属性是正确的!我如何链接到它(因为它已经正确了。)我无法控制“产品组”中的文件(删除,添加…)抱歉,我现在感觉很迟钝…删除红色链接的项目并将好的项目拖到同一窗口中。好的,我真的很接近解决方案(我认为…)当我在“复制捆绑资源”构建阶段手动添加我的sdkResources.bundle时,它会“弹出”到我的SDK文件树中,但类型为“@”bundle“]的[[NSBundle mainBundle]pathForResource:@”sdkResources]仍然返回null:/Ok:/I了解。我已在“目标依赖项”中添加了sdkResources我的sdk目标,但除了在我的sdk测试中,它仍然不起作用:/I我是否遗漏了其他内容?例如,我是否需要在我的podspec文件中设置一些内容?
    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)!
}()