观看扩展 NSBundle URLForResource 始终为零

Posted

技术标签:

【中文标题】观看扩展 NSBundle URLForResource 始终为零【英文标题】:Watch extension NSBundle URLForResource always nil 【发布时间】:2016-03-15 09:26:29 【问题描述】:

在我的应用程序中,我使用了一个带有资源目标的静态库,我已将资源目标连接到 Build Phases -> Copy Bundle Resources,并像这样获取库资源:

 NSUrl *resourcesUrl = [[NSBundle mainBundle] URLForResource:@"MySDKResources" withExtension:@"bundle"]
 NSBundle *bundle = [NSBundle bundleWithURL:resourcesUrl];  
 NSString *path = [bundle pathForResource:filename ofType:fileExtension];

使用 watch 扩展,当应用程序收到 func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) 委托时,我使用相同的代码,但这次

resourcesUrl 位于不同的文件夹中,我在 finder 上找不到一个 捆绑为零 path 显然是 nil didReceiveMessage 委托调用此代码不在主线程上(所以我在主线程上调度)

在同一会话中,当应用程序类之一调用此代码文件路径返回正常,但当监视扩展委托调用相同代码时,它返回 nil

我尝试将静态库添加到 Target DependenciesCompile Sources 并将资源目标添加到 Copy Bundle Resources 但我得到 No such file or directory 错误

【问题讨论】:

【参考方案1】:

好的,事实证明,当您运行手表模拟器时,它会杀死 iPhone 模拟器上的应用程序(但不会使其崩溃),因此看起来应用程序正在运行,但实际上您无法实例化捆绑包或任何其他应用程序资源。 this blog post 解释如何在调试时一起运行应用程序和监视应用程序。

TL;DR:

在 Xcode 菜单栏上的模拟器上运行代码时选择 Debug -> 附加到进程 -> 从列表中选择您的 ios 应用程序的进程 (它可能在可能的目标之下)

【讨论】:

以上是关于观看扩展 NSBundle URLForResource 始终为零的主要内容,如果未能解决你的问题,请参考以下文章

如何创建具有文件类型的资源包? NSBundle?

观看扩展 iCloud 功能,哪个目标?

NSBundle

NSBundle

IOS NSBundle使用(访问文件夹)

NSBundle - (尚未加载)错误