ios - watchAppExtension 中的 NSUserDefault 更改通知处理

标签 ios apple-watch usergroups

我正在创建一个  Watch 应用程序,以便在用户点击 iPhone/主机应用程序中的表格 View 时在 watch 上显示一个值。

我想收到有关共享 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 不具备在应用程序和扩展程序之间分布式通知的功能,通知在两者之间不起作用,相反,您需要找到一种方式让两者都可以监控变化。例如文件。

因为你已经创建了group,你可以在group文件夹中保留一个文件并在扩展中添加一个filewatcher,从app更新文件,并且 filewatcher 将捕获更改,您的工作就完成了。

filewatcher 见代码 here .

希望对您有所帮助。

干杯。

更新

查找 文件观察器 Swift 版本 here .感谢 @rivera 添加。

关于ios - watchAppExtension 中的 NSUserDefault 更改通知处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794299/

相关文章:

ios - 我应该在哪里添加和删除 UICollectionViewCell 中的观察者?

ios - 检查是否安装了推特应用程序

ios - 从 @synchronized block 内的方法返回

ios - 如何将 Iphone 的远程通知传递给 Watch OS?

swift - 无法在 watchOS 上使用 GameKit (Game Center) 验证本地玩家

puppet - 使用 Puppet 将用户添加到多个组

android - PhoneGap 速度与原生 iOS 4/5 和 Android 的 GPS/定位服务/ map 对比

ios - 如何在 Apple Watch 上部署(构建和运行)应用程序?

ruby-on-rails - Rails 组/用户成员协会最佳实践

带组的 PHP/MySQL 用户系统