gpt4 book ai didi

ios - WatchKit Extension 看不到保存在 NSUserDefaults 和 App Group 中的数据

转载 作者:可可西里 更新时间:2023-11-01 00:23:15 26 4
gpt4 key购买 nike

我浏览了大量的 SO 帖子,这曾经有效,但它停止了工作。我不确定发生了什么。我使用 watchOS 1.0 开发了这款 iPhone+WatchKit 应用程序,一切正常。

我已经将我的应用程序、项目和 Apple Watch 升级到 watchOS 2.0,现在我无法使用我的应用程序组通过 NSUserDefaults 获取任何数据。

  1. 在主机应用程序和 WatchKit 扩展的 Xcode 中启用了应用程序组。我什至还尝试为 WatchKit 应用打开它。

  2. 我的群组名称称为“group.com.mycompany.myapp”(包含我真实的公司名称和应用程序名称),并且在所有目标上都已选中。

  3. 我已确认我的主机应用和 WatchKit 扩展的build设置引用了权利文件,并且我已检查这些权利文件是否包含我选择的应用组的应用组安全选项。

  4. 我已确保宿主应用程序、watchkit 扩展程序和 watchkit 应用程序的包标识符不同。我分别使用“com.mycompany.myapp”、“com.mycompany.myapp.watchkitextension”和“com.mycompany.myapp.watchkitapp”。

以下是我的主机应用、watchkit 扩展和 watchkit 应用的 Xcode 配置的一些屏幕截图,以防万一:

enter image description here

enter image description here

enter image description here

这是我的主机应用程序中能够正确读取数据的代码:

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:kAppGroupName];
NSLog(@"app defaults: %@", [defaults dictionaryRepresentation]);

这在我的控制台中产生了这个,kKeyEmployeeIdkKeyStoreNumber 是我试图在主机和 watch 之间共享的数据。

2015-12-13 13:51:35.618 MyApp[27516:16126253] app defaults: {
AppleLanguages = (
"en-US",
en
);
INNextHearbeatDate = "472211882.83309";
NSInterfaceStyle = macintosh;
NSLanguages = (
"en-US",
en
);
"com.apple.content-rating.AppRating" = 1000;
"com.apple.content-rating.ExplicitBooksAllowed" = 1;
"com.apple.content-rating.ExplicitMusicPodcastsAllowed" = 1;
"com.apple.content-rating.MovieRating" = 1000;
"com.apple.content-rating.TVShowRating" = 1000;
kKeyEmployeeId = Kenny;
kKeyStoreNumber = 001;
}

在我的 WatchKit 扩展中,我有相同的代码,但它没有提供我需要的两个键值对:

- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:kAppGroupName];
NSLog(@"defaults: %@", [defaults dictionaryRepresentation]);

}

它产生这个,这与上面的非常相似,但是没有我真正需要的两个键:

2015-12-13 13:28:29.840 MyApp WatchKit Extension[720:322804] defaults: {
AppleLanguages = (
en
);
INNextHearbeatDate = "472434306.599217";
NSInterfaceStyle = macintosh;
NSLanguages = (
en
);
"com.apple.content-rating.AppRating" = 1000;
"com.apple.content-rating.ExplicitBooksAllowed" = 1;
"com.apple.content-rating.ExplicitMusicPodcastsAllowed" = 1;
"com.apple.content-rating.MovieRating" = 1000;
"com.apple.content-rating.TVShowRating" = 1000;
}

kAppGroupName 和其他常量定义如下:

NSString * const kAppGroupName = @"group.com.inadaydevelopment.MyApp";
NSString * const kKeyStoreNumber = @"kKeyStoreNumber";
NSString * const kKeyEmployeeId = @"kKeyEmployeeId";

最佳答案

在 Watch OS1 中这行得通,但在 Watch OS2 中发生了一些变化。你需要使用一个叫做 WatchConnectivity 的东西将要保存的数据发送到 watch 。然后当 watch 收到你发给它的数据时,保存到Apple watch默认的NSUserDefaults

WCSession.defaultSession() 将返回 WCSession 单例,用于在您的 iOS 和 Watch 应用程序之间传输数据。

Here是一个教程和示例。

关于ios - WatchKit Extension 看不到保存在 NSUserDefaults 和 App Group 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com