Подтвердить что ты не робот

WatchKit SDK не извлекает данные из NSUserDefaults

Я хотел сделать тестовое приложение для часов Apple, в котором вы можете установить некоторую строку на вашем телефоне, а затем она будет отображаться на Apple Watch. Я решил использовать класс NSUserDefaults для хранения этих данных.

На мой взгляд, контроллер для iPhone у меня есть метод, который берет вход и сохраняет в локальном хранилище:

- (IBAction)saveInfo:(id)sender {

    NSString *userInput = [myTextField text];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:userInput forKey:@"savedUserInput"];

    [defaults synchronize];

    self.myLabel.text = [defaults stringForKey:@"savedUserInput"];
}

И в контроллере интерфейса watch у меня есть метод, который извлекает данные и отображает их:

- (IBAction)showText2 {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults synchronize];

    self.myLabel2.text = [defaults stringForKey:@"savedUserInput"];
}

За исключением того, что данные, которые я пытаюсь получить, отображаются как null, а метка не обновляется.

4b9b3361

Ответ 1

+standardUserDefaults возвращает объект NSUserDefaults, который сохраняет информацию только для текущего процесса.

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

Из связанной документации:

После включения групп приложений расширение приложения и его приложение могут использовать API NSUserDefaults для совместного доступа к пользовательским настройкам. Чтобы включить этот общий доступ, используйте метод initWithSuiteName: для создания нового объекта NSUserDefaults, передающего идентификатор общей группы. Например, расширение Share может обновлять пользователей, которые недавно использовали учетную запись совместного доступа, используя следующий код:

// Create and share access to an NSUserDefaults object.
NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.domain.MyShareExtension"];

// Use the shared user defaults object to update the user account.
[mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];

ПРИМЕЧАНИЕ.. С помощью ОС OS2 вы больше не можете использовать контейнеры групповой группы.

Ответ 2

ВАЖНО

С часами OS2 вы больше не сможете использовать контейнеры общих групп. Вам нужно использовать этот переполнение стека answer.

"Для OS2 - вам нужно использовать рамки WatchConnectivity и реализовать WCSessionDelegate."