NSUserDefaults в группах приложений не работает

Я пытаюсь использовать право на группы приложений в своем приложении для обработки данных NSUserDefaults между приложением iPhone и расширением WatchKit.

Я перешел к возможностям в цели iPhone, включил группы приложений и убедился, что выбрано group.com.316apps.iPrayed. Затем я перешел к целевому расширению WatchKit и сделал то же самое для его возможностей.

На стороне приложения для iPhone я вставил следующий код:

PFUser *me2 = [PFUser currentUser];
        NSLog(@"USERNAME%@", me2.username);
                NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.316apps.iPrayed"];
        [testDefaults setObject:me2.username forKey:@"username"];
        [testDefaults setObject:me2.password forKey:@"password"];

        [testDefaults synchronize];

В WatchKit InterfaceController у меня есть следующее, но NSLog всегда показывает «ноль»

NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.316apps.iPrayed"];
    NSString *theirUser = [testDefaults objectForKey:@"username"];
    NSString *theirPass = [testDefaults objectForKey:@"password"];
    NSLog(@"%@", theirUser);

Почему WatchKit неправильно читает NSUserDefaults?

ПРИМЕЧАНИЕ Идентификатор моего пакета отличается от целевого расширения комплекта наблюдения. Нужен ли мне для этого новый Apple ID?


person user717452    schedule 01.04.2015    source источник


Ответы (1)


Это нормально, что ваши идентификаторы пакетов не совпадают, однако они должны быть в этом формате.

The App Bundle ID -> com.companyName.productName
The Extension Bundle ID -> com.companyName.productName.extensionName

Если они следуют указанным выше форматам, обратитесь к ответу ниже.

Вам нужно добавить наблюдателя, который знает, когда значение в NSUserDefaults изменилось.

Обратитесь к этому коду:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(userDefaultsDidChange:)
                                                 name:NSUserDefaultsDidChangeNotification
                                               object:nil];
person Suneet Tipirneni    schedule 01.04.2015
comment
Поскольку WatchOS 3 (я думаю) userDefaults больше не доступны на часах, даже если группа приложений верна. - person mxcl; 13.11.2017