Ios 使用应用程序扩展时,NSUserDefaults布尔值返回false

Ios 使用应用程序扩展时,NSUserDefaults布尔值返回false,ios,objective-c,xcode,nsuserdefaults,ios-app-extension,Ios,Objective C,Xcode,Nsuserdefaults,Ios App Extension,我正在应用程序中使用通知扩展来更改通知声音 当用户在设置页面中关闭ui开关时,我会保存在NSUserDefaultsaboolean中,以跟踪状态 然而,我有两个不同的故事板为两种不同的语言,每一个都有自己的风格 当我使用故事板A并在控制台中打印布尔值的状态时,它正确地打印了状态。但是当我改变语言时,就会加载一个不同的故事板B。boolean总是返回false 尽管布尔值总是返回false,但我已经测试了通知的声音,它工作正常 知道为什么布尔值总是返回false吗?我需要正确的值,以便在设置页面

我正在应用程序中使用通知扩展来更改通知声音

当用户在设置页面中关闭
ui开关时,我会保存在
NSUserDefaults
a
boolean
中,以跟踪状态

然而,我有两个不同的故事板为两种不同的语言,每一个都有自己的风格

当我使用故事板A并在控制台中打印
布尔值的状态时,它正确地打印了状态。但是当我改变语言时,就会加载一个不同的故事板B。
boolean
总是返回
false

尽管布尔值总是返回
false
,但我已经测试了通知的声音,它工作正常

知道为什么
布尔值总是返回
false
吗?我需要正确的值,以便在设置页面中正确显示铃声的状态

以下是我正在使用的代码:

- (void)setPlayDefaultSound:(BOOL)playDefaultSound
{
    NSUserDefaults *def = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xx.xxx.NotificationServices"];
    [def setBool:playDefaultSound forKey:@"playDefaultSound"];
    [def synchronize];
}
- (BOOL)playDefaultSound
{
    NSUserDefaults *def = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xx.xxx.NotificationServices"];
    return [def boolForKey:@"playDefaultSound"];
}
下面是Notification Services扩展的Info.plist的屏幕截图:


您每次都在创建NSUserDefaults的新实例。每次使用相同的实例

用这个代替

- (void)setPlayDefaultSound:(BOOL)playDefaultSound
{

   [[NSUserDefaults standardUserDefaults] setBool:playDefaultSound forKey:@"playDefaultSound"];
   [[NSUserDefaults standardUserDefaults] synchronize];
}
- (BOOL)playDefaultSound
{
    return [[NSUserDefaults standardUserDefaults] boolForKey:@"playDefaultSound"];
}

功能名称不匹配,输入错误


它现在工作正常。

这适用于应用程序内部,而不是在应用程序和应用程序之间共享时extension@Sh_Khan你的意思是什么?@Skywalker你建议的是在应用程序内部使用NSUserDefaults的方法,而初始化它的方法和我一样是在应用程序和应用程序扩展之间共享。如果问题是输入错误,那么这个问题对未来的读者没有帮助。。请删除此问题