我正在创建一个 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/