我试图调用一个特定的设置是保存在我的iphone应用程序的设置包。我想做一个if语句基于什么被保存。我在实现文件中的代码看起来像这样:
branchMatch = [[NSString alloc] initWithString:[defaults objectForKey:@"branch"]];
设置文件中的对象只是特定分支的名称。我一直得到SIGABRT错误,但我不知道为什么。
首先,不需要用另一个字符串初始化一个字符串。假设branchMatch是一个NSString*
,下面的语句就足够了:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
branchMatch = (NSString*)[defaults objectForKey:@"branch"];
第二,检查objectForKey
是否返回一个nil
。您的SIGABRT很可能是由于那里有一个nil。
编辑:这些值不存在于集合中,直到用户打开设置并显式更改它们。如果没有找到设置(如nil
),则由您提供合理的值。settings bundle中的那些不会自动应用;
是否检查objectForKey调用是否返回nil?
改为:
NSUserDefault* defaults = [NSUserDefauls standardUserDefaults];
NSString* setting = [defaults objectForKey:@"branch"];
if (setting)
// Do what needed if branch is set
else
// Do what needed if branch has never been set
经过一番努力,我意识到我需要从委托类而不是ViewController中加载用户默认值。
感谢所有的输入