10

我正在创建一个  Watch 应用程序,只是为了在用户点击 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];

在 Watchkit 扩展中注册了通知:

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

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

4

2 回答 2

3

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

正如您已经创建的那样group,您可以在组文件夹中保留一个文件并添加一个filewatcherin 扩展名,从应用程序更新文件,然后filewatcher捕获更改,您的工作就完成了。

filewatcher参阅此处的代码。

希望能帮助到你。

干杯。

更新

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

于 2015-01-06T09:50:13.603 回答
2

您可以尝试MMWormHole,它提供:

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

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

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

[self.wormhole listenForMessageWithIdentifier:@"button" 
  listener:^(id messageObject) {
    self.numberLabel.text = [messageObject[@"buttonNumber"] stringValue];
}];
于 2015-11-19T10:03:38.360 回答