2015-03-05 2 views
0

Я довольно новичок в программировании и полностью самоучитель, поэтому не стесняйтесь указывать на ошибки в логике или на практике.Watchkit, как вызвать функцию из контроллера вида в родительском приложении

Я пытаюсь обновить параметр в settingsViewController родительского приложения с помощью кнопки переключения в приложении для наблюдения. Если я использую группы приложений и NSUserDefaults, тогда я могу получить настройки для обновления всякий раз, когда появляется параметр settingsViewContoller, проверяя значения по умолчанию. Но мне нужно, чтобы приложение обновлялось в режиме реального времени, когда пользователь переключает переключатель в приложении часов. Я попытался использовать openParentApplication в watchSettingsViewController.

- (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); 
    }]; 

} 

Тогда в 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

В «приложении: handleWatchKitExtensionRequest: reply:» вы создаете новый «SettingsViewController», но не нажимаете его на экране.

Если на экране уже есть «SettingsViewController», вам необходимо получить ссылку на эту и обновить «настройку» в этом контроллере представления.

1

Если вам нужно обновить значение в NSUserDefaults, то я бы не стал создавать контроллер вида. Вместо этого я просто извлечу функции сохранения параметров в простой класс и вызовет его метод для обновления настройки.

Смежные вопросы