当前位置:  开发笔记 > IOS > 正文

WatchKit Extension看不到带有App Group的NSUserDefaults中保存的数据

如何解决《WatchKitExtension看不到带有AppGroup的NSUserDefaults中保存的数据》经验,为你挑选了1个好方法。

我已经经历了很多SO帖子,并且可以使用它,但是它停止了工作。我不确定发生了什么。我使用watchOS 1.0开发了这个iPhone + WatchKit应用程序,并且一切正常。

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

    在主机App和WatchKit Extension的Xcode中启用了App Groups。我什至还尝试为WatchKit App打开它。

    我的群组名称称为“ group.com.mycompany.myapp”(带有我的真实公司名称和应用名称),并且在所有目标上均已选择。

    我已经确认主机应用程序的构建设置和WatchKit扩展引用了权利文件,并检查了这些权利文件是否包含所选应用程序组的应用程序组安全性选项。

    我确保主机应用程序,watchkit扩展程序和watchkit应用程序的捆绑包标识符不同。我分别使用“ com.mycompany.myapp”,“ com.mycompany.myapp.watchkitextension”和“ com.mycompany.myapp.watchkitapp”。

这是我的Xcode配置的一些截图,用于主机应用程序,watchkit扩展程序和watchkit应用程序,以防万一:

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

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

这会在我的控制台中产生该数据,kKeyEmployeeId并且kKeyStoreNumber是我要在主机和手表之间共享的数据。

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扩展中,我具有相同的代码,但是没有提供我需要的两个key:value对:

- (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";

Rashwan L.. 5

在Watch OS1中可以使用,但是在Watch OS2中进行了一些更改。您需要使用名为WatchConnectivity的东西将要保存的数据发送到手表。然后,当手表收到您发送给它的数据时,将其保存为Apple Watch的默认设置NSUserDefaults

WCSession.defaultSession()将返回在WCSessioniOS和Watch应用之间传输数据的单例。

这是一个教程和示例。



1> Rashwan L..:

在Watch OS1中可以使用,但是在Watch OS2中进行了一些更改。您需要使用名为WatchConnectivity的东西将要保存的数据发送到手表。然后,当手表收到您发送给它的数据时,将其保存为Apple Watch的默认设置NSUserDefaults

WCSession.defaultSession()将返回在WCSessioniOS和Watch应用之间传输数据的单例。

这是一个教程和示例。

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有