【问题标题】:How to call a specific user default in iOS如何在 iOS 中调用特定用户默认值
【发布时间】:2011-12-24 21:34:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone ios settings.bundle application-settings


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢...我已将其重新编码为: NSString *branchName = [defaults objectForKey:@"branch"];我的结果是返回一个“null”(我使用 alertview 来显示结果)。现在我不知道为什么我会变成空值。
    • 我在设置 root.plist 中检查了我的标识符,它绝对是“分支”。我的默认值是“埃德蒙顿”。本节的完整代码是: NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *branchName = [默认 objectForKey:@"branch"]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Branch" message:branchName delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [警报显示];
    • 我的应用是一个标签栏应用。在第一个选项卡上,我有一个 Picker,它显示 7 个可供选择的分支。在设置默认值中,我将其设置为显示“埃德蒙顿”。我在单独的选项卡中调用 NSUserDefaults ......这是问题吗?
    • “设置默认值”是指设置包中的那个吗?在用户运行“设置”之前不会应用该选项。如果你自己写 NSUserDefaults,你会打电话给synchronize吗?
    • 我在保存文件时调用了同步,但在我尝试加载 NSUserDefaults 时没有调用...我应该是吗?...如果是,在哪里?
    【解决方案2】:

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

    【讨论】:

    • 是的……现在还不知道为什么。
    【解决方案3】:

    改为这样做:

    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
    

    【讨论】:

      【解决方案4】:

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

      感谢大家的意见

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-19
        • 1970-01-01
        • 1970-01-01
        • 2018-07-14
        • 2015-06-04
        • 1970-01-01
        相关资源
        最近更新 更多