Я довольно новичок в программировании и полностью самоучитель, поэтому не стесняйтесь указывать на ошибки в логике или на практике.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);
}
Но в родительском приложении настройки не изменяются. Есть ли способ сделать это? Спасибо