我已经经历了很多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()
将返回在WCSession
iOS和Watch应用之间传输数据的单例。
这是一个教程和示例。
在Watch OS1中可以使用,但是在Watch OS2中进行了一些更改。您需要使用名为WatchConnectivity的东西将要保存的数据发送到手表。然后,当手表收到您发送给它的数据时,将其保存为Apple Watch的默认设置NSUserDefaults
。
WCSession.defaultSession()
将返回在WCSession
iOS和Watch应用之间传输数据的单例。
这是一个教程和示例。