我是编程和完全自学的新手,所以请随意指出逻辑或最佳实践中的错误。
我正在尝试使用我的监视应用中的切换按钮更新父应用的settingsViewController中的设置。如果我使用应用程序组和NSUserDefaults,那么只要通过检查默认值出现settingsViewContoller,我就可以获得更新设置。但我需要应用程序更新直播,因为用户切换手表应用程序中的开关。我已经尝试在watchSettingsViewController中使用openParentApplication。
- (IBAction)soundToggle:(BOOL)value {
if(!value){
NSDictionary * soundToggleOff = [[NSDictionary alloc]initWithObjects: @[@"soundToggleOff"] forKeys: @[@"toggleState"]];
[WKInterfaceController openParentApplication:soundToggleOff reply:^(NSDictionary *replyInfo, NSError *error) {
NSLog(@"Sound reply is %@", replyInfo );
}];
}else{
NSDictionary * soundToggleOn = [[NSDictionary alloc]initWithObjects: @[@"soundToggleOn"] forKeys: @[@"toggleState"]];
[WKInterfaceController openParentApplication:soundToggleOn reply:^(NSDictionary *replyInfo, NSError *error) {
NSLog(@"Sound reply is %@", replyInfo );
}];
}
然后在我正在使用的父app的appDelagate中:
-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{
NSString * request = [userInfo objectForKey:@"toggleState"];
NSString * notificationStatus = request;
SettingsViewController * settingsView = [[SettingsViewController alloc]init];
if ([request isEqualToString:@"soundToggleOn"]) {
[settingsView updatePushNotificationSettings: settingsView.soundButton];
}else if ([request isEqualToString:@"soundToggleOff"]){
[settingsView updatePushNotificationSettings: settingsView.soundButton];
}
NSDictionary * replyContent = [[NSDictionary alloc]initWithObjects:@[notificationStatus] forKeys:@[@"notificationStatus"]];
reply(replyContent);
}
但在父应用中,设置不会改变。有没有办法做到这一点? 感谢
答案 0 :(得分:1)
如果您只需要更新NSUserDefaults中的值,那么我就不会打扰创建一个视图控制器了。相反,我只是在普通类中提取设置保存功能并调用其方法来更新设置。
答案 1 :(得分:0)
在“application:handleWatchKitExtensionRequest:reply:”中,您正在创建一个新的“SettingsViewController”,但从未在屏幕上推送它。
如果屏幕上已经存在“SettingsViewController”,则需要获取对该视图的引用并更新此视图控制器中的“设置”。