iOS 8.2 [NSUserDefaults standardUserDefaults]返回nil

编程入门 行业动态 更新时间:2024-10-07 12:28:31
本文介绍了iOS 8.2 [NSUserDefaults standardUserDefaults]返回nil的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在iOS 8.2中遇到一个奇怪的问题,其中[NSUserDefaults standardUserDefaults]在iPhone上返回nil。这种相同的逻辑未曾在所有以前版本的iOS上发挥过作用。我有一个通用应用程序有两个不同的settings.plist一个用于iPad,另一个用于iPhone列表如下;

I am encountering a strange issue in iOS 8.2 where [NSUserDefaults standardUserDefaults] is returning nil on iPhone. This same logic untouched has worked on all previous releases of iOS. I have a universal app which has two different settings.plist one for iPad and the other for iPhone list as follows;

Settings.bundle- -Root.plist -Root~iphone.plist

安装在设备上的正确设置窗格显示,用户可以输入给定字段的相应值。虽然在运行时我的应用程序[NSUserDefaults standardUserDefalts]返回一个nil对象。

When installed on devices the correct settings pane displays and the user can input the appropriate values for the given fields. Though in my app at runtime [NSUserDefaults standardUserDefalts] returns a nil object.

我可能做错了什么? Apple是否改变了预期的8.2?

What might I be doing wrong? Has Apple changed what is expected in 8.2?

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

无论在系统设置中设置了什么首选项,userDefaults始终为nil。

userDefaults is always nil no matter what preferences are set in system settings.

推荐答案

您是否将字典设置为Settings.bundle / Root.plist?

Did you set the dictionary to use as "Settings.bundle/Root.plist"?

// Register the preference defaults from file "Settings.bundle/Root.plist" NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"Settings.bundle/Root" ofType:@"plist"]]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

此后 [NSUserDefaults standardUserDefaults] 不再是nil。

在我的例子中, [NSUserDefaults standardUserDefaults] 使用的字典在调试器中如下所示:

In my case, the dictionary used by [NSUserDefaults standardUserDefaults] looks like this in the debugger:

{ PreferenceSpecifiers = ( { DefaultValue = 1; Key = sortByDistance; Title = "Sortiere nach Entfernung"; Type = PSToggleSwitchSpecifier; } ); StringsTable = Root; }

要访问首选项,我写了一个小方法:

To access the preferences I've written a tiny method:

- (id) preferenceValueForKey: (NSString *)key { NSArray *preferences = [[NSUserDefaults standardUserDefaults] arrayForKey:@"PreferenceSpecifiers"]; NSUInteger index = [preferences indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { return [[obj valueForKey:@"Key"] isEqualToString:key]; }]; return [preferences[index] valueForKey:@"DefaultValue"]; }

更多推荐

iOS 8.2 [NSUserDefaults standardUserDefaults]返回nil

本文发布于:2023-11-26 23:33:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635661.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:iOS   NSUserDefaults   nil   standardUserDefaults

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!