我正在尝试调用保存在我的 iphone 应用程序设置包中的特定设置。我想根据保存的内容做一个 if 语句。我在实现文件中的代码如下所示:
branchMatch = [[NSString alloc] initWithString:[defaults objectForKey:@"branch"]];
设置文件中的对象只是特定分支的名称。我不断收到 SIGABRT 错误,但我不知道为什么。
我正在尝试调用保存在我的 iphone 应用程序设置包中的特定设置。我想根据保存的内容做一个 if 语句。我在实现文件中的代码如下所示:
branchMatch = [[NSString alloc] initWithString:[defaults objectForKey:@"branch"]];
设置文件中的对象只是特定分支的名称。我不断收到 SIGABRT 错误,但我不知道为什么。
首先,不需要用另一个字符串初始化一个字符串。假设 branchMatch 是 a NSString*
,以下就足够了:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
branchMatch = (NSString*)[defaults objectForKey:@"branch"];
其次,检查是否objectForKey
返回 a nil
。您的 SIGABRT 很可能是由于那里的 nil 造成的。
编辑:在用户打开设置并明确更改它们之前,这些值不会出现在集合中。如果未找到设置 (is nil
),则由您提供合理的值。设置包中的那些不会自动应用;它们仅用于“设置”应用程序正确初始化其 UI。
您是否检查 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 加载用户默认值。
感谢所有的投入