无法访问用户默认值

Posted

技术标签:

【中文标题】无法访问用户默认值【英文标题】: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"]); 【参考方案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"];

【讨论】:

以上是关于无法访问用户默认值的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Userdefaults 访问数据 - Swift

ping 无法访问目标主机?

android访问其他数据库需要啥权限

我似乎无法访问地理位置返回值

Laravel 无法取消选中使用 old 并设置默认值的复选框

win10 edge浏览器无法访问localhost怎么办