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