【问题标题】:Can't read WatchKit settings bundle from iPhone app无法从 iPhone 应用程序读取 WatchKit 设置包
【发布时间】:2015-08-24 08:37:04
【问题描述】:

在 watchOS 2 中,您似乎无法从手表扩展本身访问 WatchKit 设置包中的数据,因为它现在在手表而不是主机 iPhone 上运行。 here提出的一个解决方案是读取iPhone上的数据,然后传输到手表上。

我的问题是,我不仅可以从手表读取数据,甚至可以从手机读取数据。在 ViewController.m 中,我有以下代码来获取开关的值:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.iossoftware.SocialAppDataSharing"];
NSLog(@"%d", [[[NSUserDefaults alloc] initWithSuiteName:@"group.de.iossoftware.SocialAppDataSharing"] boolForKey:@"key_here"]);

即使启用了设置包中的开关,它也始终返回“0”。

我正在使用应用程序组,并确保在设置包和 iPhone 应用程序中使用相同的标识符:

为什么我无法通过手机访问捆绑数据?

【问题讨论】:

  • 也许是个假问题,但你添加了[默认同步];最后?
  • 不,这没有帮助。
  • 但是您可以在 NSUserdefaults 中添加和保存其他值,例如 NSNumber 并读取它?键的方法值是否返回保存除 BOOL 以外的其他值的东西?
  • 在前一行设置值,然后读取它可以正常工作。从设置包中读取也不适用于字符串等其他类型。它只返回“(null)”。

标签: ios objective-c iphone watchkit apple-watch


【解决方案1】:

试试这个:

 NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.iossoftware.SocialAppDataSharing"];
[userDefaults setValue:@55 forKey:@"myNumber"];   
[userDefaults synchronize];

在iOS模拟器中执行一次,然后删除并添加:

    NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.iossoftware.SocialAppDataSharing"];
NSLog(@"My number: %@",[userDefaults valueForKey:@"myNumber"]

然后再执行一次。您应该会看到之前保存的值

NSError *error = nil;
NSLog(@"### Directory path: %@",[[NSFileManager defaultManager]contentsOfDirectoryAtPath:[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.de.iossoftware.SocialAppDataSharing"].path error:&error]);
NSLog(@"Error: %@",error);

在最后一行,您将记录保存组文件的文件路径。在 finder 中打开它,您应该会在 ...../Library/Preferences/ 下看到一个包含创建的 NSUserdefaults 的 plist

【讨论】:

  • 所以,我现在可以看到创建的 NSUserDefaults,但在那里找不到来自 bundle 的 NSUserDefaults。
  • 捆绑包中的默认值是什么意思? [NSUserDefaults 标准用户默认值]; ?
  • 不,[[NSUserDefaults alloc] initWithSuiteName:@"group.de.iossoftware.SocialAppDataSharing"];
  • 对,你应该看到一个文件名:group.de.iossoftware.SocialAppDataSharing.plist 如果没有,可能是设置共享文件夹的问题
【解决方案2】:

我不确定您到底想做什么,因为我不清楚您的问题。但是,在 WatchOS 2 中,您不能使用共享组容器,您必须使用 Watch Connectivity 框架在手表和手机之间同步数据。这类似于这里的问题:NSUserDefaults not working on Xcode beta with Watch OS2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2017-06-21
    • 2015-06-13
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多