watchAppExtension中的NSUserDefault变更通知处理方法

问题描述 投票:10回答:2

我正在创建一个手表应用程序,只是为了在用户点击iPhonehost应用程序中的表格视图时在手表上显示一个值。

我想在共享的手表上的值发生变化时得到一个通知。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];

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

ios apple-watch usergroups
2个回答
3
投票

我不认为iOS有这样的功能 distributed notifications 应用和扩展之间,通知在二者之间是行不通的,相反,你需要找到一种方法,让二者都能监控变化。比如说文件。

由于你已经创建了 group您可以在组文件夹中保存一个文件,并在该文件中添加一个新的文件。filewatcher 在扩展名中,从应用程序中更新文件,并在应用程序中更新文件。filewatcher 将抓住这个变化,你的工作就完成了。

对于 filewatcher 见义勇为 此处.

希望对你有所帮助。

干杯。

更新

寻找 File watcher Swift version 此处. 谢谢你 @rivera 用于添加。


2
投票

你可以尝试 MMWormHole 它在iOS设备和手表之间提供了:

  • 在iOS设备和手表之间提供了一个通道,让你可以在它们之间来回发送数据。
  • 还提供了一种不需要自己处理文件监控的方式来做通知。

使用它,这将是在你的应用程序中做通知所需的所有代码。

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

[self.wormhole listenForMessageWithIdentifier:@"button" 
  listener:^(id messageObject) {
    self.numberLabel.text = [messageObject[@"buttonNumber"] stringValue];
}];
© www.soinside.com 2019 - 2024. All rights reserved.