无法将 NSUserDefaults 与 Apple Watch 同步

Can't sync NSUserDefaults with apple Watch

我需要将 2 个双打传递给 apple watch,为此我在扩展和主应用程序中设置了应用程序组,下一步:

主应用程序:

groupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.XXXXX"];
[groupDefaults setDouble:pitchDelta forKey:@"pitch_delta"];
[groupDefaults setDouble:rollDelta forKey:@"roll_delta"];
[groupDefaults synchronize];

分机:

groupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.XXXXX"];
double pitchDelta = [groupDefaults doubleForKey:@"pitch_delta"];
double rollDelta = [groupDefaults doubleForKey:@"roll_delta"];

但是没有传递值。我是不是忘记了什么?

在主应用程序代码中

[groupDefaults setDouble:pitchDelta forKey:@"pitch_delta"];
[groupDefaults setDouble:rollDelta forKey:@"roll_delta"];
[groupDefaults synchronize];
        NSLog(@"%f %f", [groupDefaults doubleForKey:@"pitch_delta"], [groupDefaults doubleForKey:@"roll_delta"]);

returns 在日志中 -0.387812 -0.098052

如果你使用模拟器,你可以查看这些数据是否成功持久化。

在我的例子中,路径是:

/Users/benson/Library/Developer/CoreSimulator/Devices/C4557E97-F6E4-48A9-B1C7-04441B3A0214/data/Containers/Shared/AppGroup/991C1FE1-6839-441E-A2F4-66834A683153/Library/Preferences/group.XXXXX.plist

打开group.XXXXX.plist文件,查看这些值是否存在。

在模拟器中,同步 NSUserDefaults 目前并不总是有效。这是一个众所周知的问题。我花了很多时间寻找我的代码中的错误,最后证明我的代码在实际的 Apple Watch 上运行完美。

但是,我不确定是否可以写这么高的频率。你如何确保同步?

您需要实施共享容器,以便在主应用和扩展程序之间进行通信。

查看给定的 link 手表套件教程:-

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/DesigningaWatchKitApp.html#//apple_ref/doc/uid/TP40014969-CH3-SW4

尝试从设备和手表中完全删除应用,然后重试。

我在使用 Today extension 进行测试时遇到了同样的问题。

同时检查开发者门户,您的应用 ID 是否正确启用了应用组权限,尽管您可能会在 Xcode

上看到