无法访问用户默认值
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"];
【讨论】:
以上是关于无法访问用户默认值的主要内容,如果未能解决你的问题,请参考以下文章