应用程序组中的 NSUserDefaults 不起作用

NSUserDefaults in App Groups Not Working

我正在尝试在我的应用程序中使用应用程序组授权,以便 NSUserDefaults 处理 iPhone 应用程序和 WatchKit 扩展之间的数据。

我转到 iPhone 目标中的功能,打开应用程序组,并确保选择了 group.com.316apps.iPrayed。然后我去了 WatchKit Extension Target 并对其 Capabilities 做了同样的事情。

在应用程序的 iPhone 端,我输入了以下代码:

PFUser *me2 = [PFUser currentUser];
        NSLog(@"USERNAME%@", me2.username);
                NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.316apps.iPrayed"];
        [testDefaults setObject:me2.username forKey:@"username"];
        [testDefaults setObject:me2.password forKey:@"password"];

        [testDefaults synchronize];

在 WatchKit InterfaceController 中,我有以下内容,但 NSLog 始终显示 'null'

NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.316apps.iPrayed"];
    NSString *theirUser = [testDefaults objectForKey:@"username"];
    NSString *theirPass = [testDefaults objectForKey:@"password"];
    NSLog(@"%@", theirUser);

为什么 WatchKit 没有正确读取 NSUserDefaults?

注意 我的包标识符与手表套件扩展目标不同。我需要一个新的 Apple ID 吗?

你的包标识符不一样没关系,但它们应该采用这种格式

The App Bundle ID -> com.companyName.productName
The Extension Bundle ID -> com.companyName.productName.extensionName

如果他们遵循上面的格式,那么请参考下面的答案

您需要添加一个观察者,它知道 NSUserDefaults 中的值何时发生变化。

参考这段代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(userDefaultsDidChange:)
                                                 name:NSUserDefaultsDidChangeNotification
                                               object:nil];