NSUserDefaults使用app扩展时返回false

时间:2018-06-05 07:47:38

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

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

当用户关闭设置页面中的UISwitch时,我会保存在NSUserDefaults a 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 Extension的Info.plist的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:0)

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

改为使用它。

"architect": {
   "build": { ... }
   "server": {
     "builder": "@angular-devkit/build-angular:server",
     "options": {
       "outputPath": "dist/your-project-name-server",
       "main": "src/main.server.ts",
       "tsConfig": "src/tsconfig.server.json"
     }
   }
}

答案 1 :(得分:0)

功能名称不匹配,这是一个错字。

现在正常工作。