【问题标题】:Unable to access userdefaults无法访问用户默认值
【发布时间】:2014-02-08 13:15:26
【问题描述】:

我为我的应用创建了一个首选项窗格。我正在使用首选项窗格将一些基本设置存储到 userdefaults 中。我无法从应用程序访问这些设置值。

如下所述,我正在将设置保存为用户默认设置:

NSString *fooBar = @"settings_value";
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
[userDef setObject:fooBar forKey:@"app_setting"];
[userDef synchronize];

现在当我从应用程序访问它时:

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
NSString *svcEnv = [userDef objectForKey:@"app_setting"];

我得到一个零值。但是当从首选项窗格项目访问时,我将获得设置值,但不在应用程序中。

如何在应用程序中检索设置值?

【问题讨论】:

  • 你确定,你至少调用了一次保存方法吗?
  • @etolstoy 你的意思是synchronize 吗?是的,我已经做到了。我仍然可以从首选项窗格中读取值,但不能从应用程序中读取。它也没有沙盒。
  • 您是否尝试在同步后记录该值.. NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"app_setting"]);

标签: macos cocoa nsuserdefaults


【解决方案1】:

[NSUserDefaults standardUserDefaults] 返回当前应用程序的默认值,在首选项窗格的情况下是系统首选项应用程序。相反,您需要使用具有捆绑标识符的域的首选项,该捆绑标识符包含您的首选项窗格的类:

NSUserDefaults *suds = [NSUserDefaults standardUserDefaults];
NSString * bundleID = [[NSBundle bundleForClass:[self class]] bundleIdentifier];

NSMutableDictionary *prefs = [[suds persistentDomainForName:bundleID] mutableCopy];

要将它们保存回来使用:

[suds setPersistentDomain:prefs forName:bundleID];
[sud synchronize];

【讨论】:

  • 我试过这个。我确保两个应用程序具有相同的包标识符。然后我修改了我从 Preferences Pane 应用程序中保存的部分,以使用它的 Bundle 标识符,正如你所提到的,但没有运气:(
【解决方案2】:

你应该使用stringForKey:

NSString *svcEnv = [userDef stringForKey:@"app_setting"];

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 2017-03-15
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多