NSUserDefault在watchppExtension中更改通知处理

我正在创build一个iwatch应用程序,只需在iphone应用程序中单击tableview时显示值。

我想获得共享userdefault值更改通知。 它是watchkitapp和iPhone应用程序之间共享,所以当用户做任何改变的手机我必须得到通知。 我做了以下

当用户在手机上执行某些操作时

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

在watchkit扩展中已经注册了通知

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

但不幸的是,我没有收到任何通知,任何人都知道一些解决scheme

我不认为iOS能够在应用程序和扩展之间distributed notifications ,通知不会在两者之间起作用,相反,您需要find两种方式来监视更改。 例如文件。

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

对于filewatcher 在这里看代码。

希望能帮助到你。

干杯。

更新

在这里findFile 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]; }]; 
Interesting Posts