Ios Can';t从iPhone应用程序读取WatchKit设置包

Ios Can';t从iPhone应用程序读取WatchKit设置包,ios,objective-c,iphone,watchkit,apple-watch,Ios,Objective C,Iphone,Watchkit,Apple Watch,在watchOS 2中,您似乎无法从手表扩展本身访问WatchKit设置包中的数据,因为它现在在手表上运行,而不是在主机iPhone上运行。有人提出了一种解决方案,即在iPhone上读取数据,然后将数据传输到手表上 我的问题是,我不仅不能从手表上读取数据,甚至不能从手机上读取数据。在ViewController.m中,我有以下代码来获取开关的值: NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@&

在watchOS 2中,您似乎无法从手表扩展本身访问WatchKit设置包中的数据,因为它现在在手表上运行,而不是在主机iPhone上运行。有人提出了一种解决方案,即在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 *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/a plist下看到,其中包含创建的NSUserdefaults

我不确定您到底想做什么,因为我不清楚您的问题。但是,对于WatchOS 2,您不能使用共享组容器,必须使用Watch Connectivity framework在手表和手机之间同步数据。这与此处的问题类似:

可能是一个虚拟问题,但您是否添加了[Default synchronize];最后?不,那没有帮助。但是你可以在NSUserdefaults中添加和保存其他值,比如NSNumber,然后读取它?键的方法值是否在保存布尔值以外的值时返回某些值?在读取前设置一行值,然后正确读取。从设置包中读取也不适用于字符串等其他类型。它只返回“(null)”。因此,我现在可以看到创建的NSUserDefaults,但是在那里找不到bundle中的NSUserDefaults。您的bundle中的默认值是什么意思?[NSUserDefaults standardUserDefaults]?不,是[[NSUserDefaults alloc]initWithSuiteName:@“group.de.iossoftware.SocialAppDataSharing”];对,您应该会看到一个名为group.de.iossoftware.SocialAppDataSharing.plist的文件。如果不是,则可能是设置共享文件夹时出现问题