3

我正在编写一个 WatchKit 扩展,我想从主机应用程序的[NSBundle mainBundle]. 我试过[NSBundle bundleWithIdentifier:]了,但只是返回nil

我有几个潜在的解决方法,但没有什么比“只需从主机读取您需要的内容”那么简单的了mainBundle

有没有办法做到这一点?

4

3 回答 3

2

据我所知,主机应用程序和您的 WatchKit 扩展只能通过以下两种方式之一共享文件:

  • 共享应用组
  • 在两个目标中包含一个文件

它们在单独的进程中运行,并且在批准的方法之外无法相互访问。

于 2015-04-22T12:34:22.050 回答
2

我遇到了和你类似的问题。主主机应用程序有一个我需要阅读的特定 pList,我无法从手表扩展中读取,因为它们是孤立的。

所以在手表中我调用了该openParentApplication方法

在主应用程序中,我的处理程序类似于

-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
{
        NSString *request = [userInfo objectForKey:@"request"];
        if ([request isEqualToString:ReadFile])
        {
              //read the file. and then i like to put it into a NSDictionary
                NSDictionary *responseDictionary = //whatever
                 reply(responseDictionary);
        }
        else{ reply(nil); }
}

然后在 openParentApplication 的手表上的回调闭包中将内容返回给我。似乎工作。尽管您的情况可能会有所不同,但在这种情况下,此方法可能不可行。

于 2015-04-22T15:54:38.307 回答
0

来自 Apple WatchKit 编程指南:

要在应用程序之间共享首选项数据,请使用共享组的标识符创建一个 NSUserDefaults 对象。NSUserDefaults 的 initWithSuiteName: 方法创建一个允许访问共享用户默认数据的对象。两个进程都可以访问此数据并将更改写入其中。

您的主应用程序可以将 NSDictionary/NSArray 写入共享首选项,然后手表工具包可以将其拉出,而无需启动主应用程序 - 但是,主应用程序必须至少运行一次才能更新共享首选项。

于 2015-05-01T23:08:41.797 回答