读取WatchKit中的设置-Watch.bundle时出现问题

读取WatchKit中的设置-Watch.bundle时出现问题,watchkit,apple-watch,Watchkit,Apple Watch,我拼命想弄清楚我到底做错了什么。我怀疑我遗漏了一些简单的东西 我已经建立了一个应用程序组(我们称之为group.foobar),并将其包含在主应用程序和手表扩展的设置中 在Settings-Watch.bundle中的Root.plist(它包含在主应用程序下——我认为这是正确的)中,我已将ApplicationGroupContainerIdentifier设置为“group.foobar” 我有一个用户首选项,标识符设置为“lang”。当我在模拟器的Apple Watch应用程序中查看时,首

我拼命想弄清楚我到底做错了什么。我怀疑我遗漏了一些简单的东西

我已经建立了一个应用程序组(我们称之为group.foobar),并将其包含在主应用程序和手表扩展的设置中

在Settings-Watch.bundle中的Root.plist(它包含在主应用程序下——我认为这是正确的)中,我已将ApplicationGroupContainerIdentifier设置为“group.foobar”

我有一个用户首选项,标识符设置为“lang”。当我在模拟器的Apple Watch应用程序中查看时,首选项设置显示良好

但我似乎无法在代码中读取它。在我的主应用程序中,我调用以下命令:

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

NSString *code = [defaults stringForKey:@"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

    );

}
默认值返回指向NSUserDefaults对象的有效指针,但它似乎不是我定义的首选项。没有lang的条目。相反,它包含以下内容:

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

NSString *code = [defaults stringForKey:@"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

    );

}
有人知道我做错了什么吗


非常感谢

我不确定这是否也适用于您-我刚刚从设置包中复制了组id,并将其粘贴到套件名称字符串中:

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.foobar"];
我不知道为什么,虽然它在视觉上是相同的字符串,但它解决了我的问题-也许这只是我的一个解决方案,但你也可以尝试一下。

谢谢pi1000


事实上,我找到了问题的答案。我需要调用registerDefaults方法来保存默认值,以便读取它们。我不太清楚为什么这是必需的,但似乎是。

您是否在手机和手表应用程序目标>功能>应用程序组中检查了相同的应用程序组?这没有意义,您何时调用registerDefaults:以及您作为参数传递的是什么?