NSUserDefault在watchppExtension中更改通知处理
我正在创build一个iwatch应用程序,只需在iphone应用程序中单击tableview时显示值。
我想获得共享userdefault值更改通知。 它是watchkitapp和iPhone应用程序之间共享,所以当用户做任何改变的手机我必须得到通知。 我做了以下
当用户在手机上执行某些操作时
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.app"];</br> id object = [self.plantsArray objectAtIndex:[self.plantsTable indexPathForSelectedRow].row];</br> [shared setObject:object forKey:@"data"];</br> [shared synchronize];
在watchkit扩展中已经注册了通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(print) name:NSUserDefaultsDidChangeNotification object:nil];
但不幸的是,我没有收到任何通知,任何人都知道一些解决scheme
我不认为iOS能够在应用程序和扩展之间distributed notifications
,通知不会在两者之间起作用,相反,您需要find两种方式来监视更改。 例如文件。
由于您已经创build了group
,因此您可以将文件保存在组文件夹中,并添加扩展名的filewatcher
,从app更新文件, filewatcher
将捕获更改,并完成您的工作。
对于filewatcher
在这里看代码。
希望能帮助到你。
干杯。
更新
在这里findFile 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]; }];