【问题标题】:NSUserDefaults Boolean returns false when using app extensionNSUserDefaults Boolean 在使用应用程序扩展时返回 false
【发布时间】:2018-06-05 07:47:38
【问题描述】:

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

当用户在设置页面中关闭UISwitch 时,我将保存在NSUserDefaultsboolean 中以继续跟踪状态。

但是我有两个不同的故事板,用于两种不同的语言,每个都有自己的风格。

当我使用情节提要 A 并在控制台中打印 boolean 的状态时,它正在正确打印状态。但是当我更改语言时,会加载不同的故事板 B。 boolean 总是返回 false

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

知道为什么boolean 总是返回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"];
}

这是通知服务扩展的 Info.plist 的屏幕截图:

【问题讨论】:

    标签: ios objective-c xcode nsuserdefaults ios-app-extension


    【解决方案1】:

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

    改用这个。

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

    【讨论】:

    • 这在应用程序内部而不是在应用程序和扩展程序之间共享时
    • @Sh_Khan 你是什么意思?
    • @Skywalker 您提出的是在应用程序内部使用 NSUserDefaults 的方式,而像我一样初始化它的方式是在应用程序和应用程序扩展之间共享。
    【解决方案2】:

    功能名称不匹配,打错字。

    现在可以正常使用了。

    【讨论】:

    • 如果问题是一个错字,那么这个问题将不会帮助任何未来的读者..请删除这个问题
    猜你喜欢
    • 1970-01-01
    • 2022-10-17
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多