NSUserwatchAppExtension 中的默认更改通知处理



我正在创建一个  手表应用程序,只是为了当用户点击 iPhone/主机应用程序中的表视图时在手表上显示一个值。

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

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

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.app"];
id object = [self.plantsArray objectAtIndex:[self.plantsTable indexPathForSelectedRow].row];
[shared setObject:object forKey:@"data"];
[shared synchronize];

在监视工具包扩展中已注册通知:

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

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

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

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

有关filewatcher请参阅此处的代码。

希望对您有所帮助。

干杯。

更新

在这里找到File watcher Swift version。感谢@rivera的补充。

您可以尝试MMWormHole,它提供:

  • iOS设备和手表之间的通道,使您能够在它们之间来回发送数据。
  • 还提供了一种执行通知的方法,而无需自己处理文件监视。

使用它,这将是在您的应用程序中执行通知所需的所有代码

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

相关内容

  • 没有找到相关文章

最新更新