Проблемы с чтением Settings-Watch.bundle в WatchKit

Я рву на себе волосы, пытаясь понять, что я делаю не так. Я подозреваю, что это что-то простое, чего мне не хватает.

Я создал группу приложений (назовем ее group.foobar) и включил ее в настройки основного приложения и расширения для часов.

В Root.plist в Settings-Watch.bundle (которое включено в основное приложение — я предполагаю, что это правильно) я установил для ApplicationGroupContainerIdentifier значение «group.foobar».

У меня есть одно пользовательское предпочтение с идентификатором, установленным на «lang». Настройка предпочтений отображается нормально, когда я просматриваю ее в приложении Apple Watch в симуляторе.

Но я не могу прочитать это в своем коде. В моем основном приложении я вызываю следующее:

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.foobar"];

NSString *code = [defaults stringForKey:@"lang"];

значения по умолчанию возвращают действительный указатель на объект NSUserDefaults, но, похоже, это не те предпочтения, которые я определил. Нет записи для lang. Вместо этого он содержит следующее:

(lldb) po [defaults dictionaryRepresentation]

{

    AppleITunesStoreItemKinds =     (

        wemix,

        podcast,

        document,

        "software-update",

        newsstand,

        "tv-episode",

        "tv-season",

        software,

        audiobook,

        movie,

        song,

        album,

        tone,

        booklet,

        ringtone,

        artist,

        "podcast-episode",

        "itunes-u",

        mix,

        "music-video",

        eBook

    );

    AppleKeyboards =     (

        "en_US@hw=US;sw=QWERTY",

        "emoji@sw=Emoji",

        "en_US@hw=US;sw=QWERTY"

    );

    AppleKeyboardsExpanded = 1;

    AppleLanguages =     (

        en,

        fr,

        de,

        "zh-Hans",

        "zh-Hant",

        ja,

        nl,

        it,

        es,

        "es-MX",

        ko,

        pt,

        "pt-PT",

        da,

        fi,

        nb,

        sv,

        ru,

        pl,

        tr,

        uk,

        ar,

        hr,

        cs,

        el,

        he,

        ro,

        sk,

        th,

        id,

        ms,

        "en-GB",

        "en-AU",

        ca,

        hu,

        vi,

        hi

    );

    AppleLocale = "en_US";

    MSVLoggingMasterSwitchEnabledKey = 0;

    NSInterfaceStyle = macintosh;

    NSLanguages =     (

        en,

        fr,

        de,

        "zh-Hans",

        "zh-Hant",

        ja,

        nl,

        it,

        es,

        "es-MX",

        ko,

        pt,

        "pt-PT",

        da,

        fi,

        nb,

        sv,

        ru,

        pl,

        tr,

        uk,

        ar,

        hr,

        cs,

        el,

        he,

        ro,

        sk,

        th,

        id,

        ms,

        "en-GB",

        "en-AU",

        ca,

        hu,

        vi,

        hi

    );

}

Кто-нибудь знает, что я делаю неправильно???

Спасибо заранее!!!


person BradInToronto    schedule 28.03.2015    source источник
comment
У вас есть одна и та же группа приложений, отмеченная как в приложении для телефона, так и в приложении для часов. ЦЕЛЕВЫЕ ПРОГРАММЫ › Возможности › Группы приложений?   -  person DenVog    schedule 01.04.2015


Ответы (2)


Я не уверен, что это работает и для вас - я просто скопировал идентификатор группы из пакета настроек и вставил его в строку имени Suite:

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.foobar"];

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

person fredpi    schedule 03.04.2015

Спасибо pi1000.

Собственно, я нашел ответ на свою проблему. Мне нужно было вызвать метод -registerDefaults, чтобы сохранить значения по умолчанию, чтобы я мог их прочитать. Мне не очень понятно, зачем это нужно, но похоже.

person BradInToronto    schedule 03.04.2015
comment
Это не имеет смысла, когда вы вызываете registerDefaults: и что вы передаете в качестве параметра? - person Lucien; 01.09.2015