我在我的应用程序中使用Notification扩展来更改通知声音。
当用户在设置页面中关闭UISwitch时,我会在NSUserDefaults中保存一个boolean来跟踪状态。
然而,我有两个不同的故事板,两种不同的语言,每个都有自己的风格。
当我使用序列图像板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"];
}下面是Notification Services扩展的Info.plist截图:

发布于 2018-06-05 15:54:34
您每次都会创建新的NSUserDefaults实例。每次使用相同的实例。
改用这个。
- (void)setPlayDefaultSound:(BOOL)playDefaultSound
{
[[NSUserDefaults standardUserDefaults] setBool:playDefaultSound forKey:@"playDefaultSound"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (BOOL)playDefaultSound
{
return [[NSUserDefaults standardUserDefaults] boolForKey:@"playDefaultSound"];
}发布于 2018-06-05 16:54:32
功能中的名称不匹配,这是一个打字错误。
它现在工作正常。
https://stackoverflow.com/questions/50694824
复制相似问题