1

我正在尝试调用保存在我的 iphone 应用程序设置包中的特定设置。我想根据保存的内容做一个 if 语句。我在实现文件中的代码如下所示:

branchMatch = [[NSString alloc] initWithString:[defaults objectForKey:@"branch"]];

设置文件中的对象只是特定分支的名称。我不断收到 SIGABRT 错误,但我不知道为什么。

4

4 回答 4

6

首先,不需要用另一个字符串初始化一个字符串。假设 branchMatch 是 a NSString*,以下就足够了:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
branchMatch = (NSString*)[defaults objectForKey:@"branch"];

其次,检查是否objectForKey返回 a nil。您的 SIGABRT 很可能是由于那里的 nil 造成的。

编辑:在用户打开设置并明确更改它们之前,这些值不会出现在集合中。如果未找到设置 (is nil),则由您提供合理的值。设置包中的那些不会自动应用;它们仅用于“设置”应用程序正确初始化其 UI。

于 2011-11-08T23:29:44.057 回答
1

您是否检查 objectForKey 调用没有返回 nil?

于 2011-11-08T23:29:01.767 回答
1

改为这样做:

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
于 2011-11-08T23:36:12.837 回答
0

在拉了很多头发之后,我意识到我需要从委托类而不是 ViewController 加载用户默认值。

感谢所有的投入

于 2011-11-18T13:17:24.170 回答