iOS 8.2 [NSUserDefaults standardUserDefaults]返回nil [英] iOS 8.2 [NSUserDefaults standardUserDefaults] returning 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!