首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用应用程序扩展时,NSUserDefaults布尔值返回false

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

Stack Overflow用户
提问于 2018-06-05 15:47:38
回答 2查看 54关注 0票数 0

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

当用户在设置页面中关闭UISwitch时,我会在NSUserDefaults中保存一个boolean来跟踪状态。

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

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

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

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

下面是我使用的代码:

代码语言:javascript
复制
- (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截图:

EN

回答 2

Stack Overflow用户

发布于 2018-06-05 15:54:34

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

改用这个。

代码语言:javascript
复制
- (void)setPlayDefaultSound:(BOOL)playDefaultSound
{

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

Stack Overflow用户

发布于 2018-06-05 16:54:32

功能中的名称不匹配,这是一个打字错误。

它现在工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50694824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档