【问题标题】:Load configuration constants dynamically invoking the setters?加载配置常量动态调用设置器?
【发布时间】:2010-01-18 17:13:49
【问题描述】:

我正在寻找一种设置配置常量的好方法。我的想法是用我的配置属性创建一个单例。说 mySingletonConf:URL、USERID、PASSWORD。在 sharedInstance 的初始化过程中,应该读取一个配置文件来设置 mySingletonConf 中的属性。

  1. 我应该为这种类型的常量使用属性吗?我认为它们应该是类级别的属性?
  2. 是否可以动态设置配置? IE。 通过读取 mySingletonConf 的所有 Setter-Methods,然后在加载的配置 (.plist-Dictionary) 中搜索 key == 属性名称,然后使用值调用 setter?

如果需要新的常量,动态设置这些东西会很好。然后我只需要创建新属性并调整配置文件。 我在正确的轨道上吗? 感谢您的帮助!

【问题讨论】:

    标签: objective-c configuration-files


    【解决方案1】:

    NSUserDefaults 可以处理很多事情,并确保配置是特定于用户的,因此如果同一台 Mac 上的多个用户使用您的程序,他们可以独立配置您的程序。 Interface Builder 中还有一个对象用于绑定您的用户界面元素,使事情变得更容易。如果您确实想要在系统范围内进行配置,您应该使用 Core Foundation Preference Utilities

    对于存储密码,您可以使用Apple's Keychain Services。用户可以指定允许哪些程序使用存储的密码(最好是您的密码)。如果密码不是特别重要,也可以将密码存储在 NSUserDefaults 中。

    不要重新发明轮子;为您提供应用范围内的用户或主机特定配置服务。

    【讨论】:

    • 非常感谢您的回答!我正在使用 .plist 从中读取设置。 .plist 包含许多测试参数。现在我到了,我有设置字典,我真的不想为每个 TestCase 中的每个测试参数 [configDict objectForKey:paramName]。我的想法是一次加载所有参数,然后将配置用作常量(PARAM_A)或类似的东西:[myTestConf paramA];有可能吗?
    【解决方案2】:

    嗯,有可能:) 我最终编写了提到的 Singleton,它具有只读的公共属性和类内的读写访问权限(为此使用了 Categories,请参阅 private setter example)。

    类的变量在初始化期间用 .plist 文件中的值填充。我使用 Runtime API 来获取变量列表(只需在 Stackoverflow 上搜索“objective-c list of variables”)并使用 var 名称作为键从 load.plist 字典中获取值。

    这些值几乎可以用作常量:

    MyConstants* testConstants = [MyConstants sharedInstance];
    NSLog(testConstants.PARAM1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多