Ios 在watchAppExtension中处理NSUserDefault更改通知

Ios 在watchAppExtension中处理NSUserDefault更改通知,ios,apple-watch,usergroups,Ios,Apple Watch,Usergroups,我正在创建一个 Watch app仅用于在用户点击iPhone/host app中的表视图时显示手表上的值 我希望收到共享UserDefault上的值更改通知。它在WatchKit应用程序和iOS(主机)应用程序之间共享,因此当用户在主机应用程序中进行任何更改时,我希望收到通知。我已经做了以下工作: 当用户在应用程序(主机应用程序)中执行某些操作时: 在Watchkit扩展中,已注册通知: [[NSNotificationCenter defaultCenter] addObserver:se

我正在创建一个 Watch app仅用于在用户点击iPhone/host app中的表视图时显示手表上的值

我希望收到共享
UserDefault
上的值更改通知。它在WatchKit应用程序和iOS(主机)应用程序之间共享,因此当用户在主机应用程序中进行任何更改时,我希望收到通知。我已经做了以下工作:

当用户在应用程序(主机应用程序)中执行某些操作时:

在Watchkit扩展中,已注册通知:

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

但不幸的是,我没有收到任何通知,有人有解决方案吗?

我认为iOS没有在应用程序和扩展程序之间
分布式通知的功能,通知在两者之间不起作用,相反,你需要找到一种方法,让两者都可以监控更改。例如文件

由于您已经创建了
,您可以在组文件夹中保留一个文件,并在扩展名中添加一个
filewatcher
,从应用程序更新该文件,
filewatcher
将捕获更改,您的工作就完成了

有关
filewatcher
的信息,请参阅代码

希望能有帮助

干杯

更新

查找
文件查看器Swift版本
。感谢您添加。

您可以尝试提供以下功能:

  • iOS设备和手表之间的通道,使您能够在它们之间来回发送数据
  • 还提供了一种执行通知的方法,无需自行处理文件监视
使用它,这将是在你的应用程序中进行通知所需的所有代码

[self.wormhole passMessageObject:@{@"buttonNumber" : @(1)} identifier:@"button"];

[self.wormhole listenForMessageWithIdentifier:@"button" 
  listener:^(id messageObject) {
    self.numberLabel.text = [messageObject[@"buttonNumber"] stringValue];
}];

您是否为您的应用程序和扩展启用了
App Group
?@iphone是。扩展和应用程序都启用了它,我可以通过userdefault获取所选数据。但是我需要的是在userdefault更改时执行一个操作谢谢你的建议。但是,请告诉我如何在组中共享文件好吗?@manualography很简单,您只需在组文件夹中创建一个文件,并通过捕获应用程序中的
NSUserDefaultNotification
进行更新即可。您可以使用
[[NSFileManager defaultManager]ContainerUrlForSecurity Application group Identifier:GROUPKEY]访问组文件夹.道路感谢@Rivera的添加。。如果有人遗漏了,我会更新我的答案。
[self.wormhole passMessageObject:@{@"buttonNumber" : @(1)} identifier:@"button"];

[self.wormhole listenForMessageWithIdentifier:@"button" 
  listener:^(id messageObject) {
    self.numberLabel.text = [messageObject[@"buttonNumber"] stringValue];
}];