Watchkit,如何从父应用程序中的视图控制器调用函数

时间:2015-03-05 21:58:21

标签: ios objective-c watchkit apple-watch

我是编程和完全自学的新手,所以请随意指出逻辑或最佳实践中的错误。

我正在尝试使用我的监视应用中的切换按钮更新父应用的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);
}

但在父应用中,设置不会改变。有没有办法做到这一点? 感谢

2 个答案:

答案 0 :(得分:1)

如果您只需要更新NSUserDefaults中的值,那么我就不会打扰创建一个视图控制器了。相反,我只是在普通类中提取设置保存功能并调用其方法来更新设置。

答案 1 :(得分:0)

在“application:handleWatchKitExtensionRequest:reply:”中,您正在创建一个新的“SettingsViewController”,但从未在屏幕上推送它。

如果屏幕上已经存在“SettingsViewController”,则需要获取对该视图的引用并更新此视图控制器中的“设置”。