我有一个 PList,我在字典中加载了几行数据。我想添加一行
<key>StandardValue</key>
<string>STANDARDVALUEFORCERTAININSTANCE</string>
现在,当我读出值时,我得到一个 NSString。如何获得我之前定义的常量的值
#define STANDARDVALUEFORCERTAININSTANCE 123
有没有办法获得字符串的常量表示?所以本质上要解析它?
我有一个 PList,我在字典中加载了几行数据。我想添加一行
<key>StandardValue</key>
<string>STANDARDVALUEFORCERTAININSTANCE</string>
现在,当我读出值时,我得到一个 NSString。如何获得我之前定义的常量的值
#define STANDARDVALUEFORCERTAININSTANCE 123
有没有办法获得字符串的常量表示?所以本质上要解析它?
你不能这样做。我建议一个不错的选择:KVC。
您将此变量声明为类实例:
@property (nonatomic,assign) int standardValueForCertainInstance;
然后你用 valueForKey 得到值:
NSString* key= dict[@"StandardValue"];
int value= [[self valueForKey: key] intValue];
你想做的事情并不完全可能。创建的常量#define
仅在编译时存在,在运行时无法通过名称访问它们——它们已经被转换为常量值。
可能存在的一种替代方法是定义许多返回常量值的方法,例如在一个Constants
类中。NSSelectorFromString()
然后,在运行时,从 plist 加载方法的名称并使用and调用它performSelector:
。
但是,一个可能的问题是,为了安全起见,performSelector:
您必须将所有常量重写为 Objective-C 对象(因为performSelector:
返回 type id
)。那可能很不方便。
不过,这里是Constants
该类的一个示例实现:
@implementation Constants : NSObject
+ (NSNumber *)someValueForACertainInstance
{
return @123;
}
@end
以及示例用法:
NSDictionary *infoDotPlist = [[NSBundle mainBundle] infoDictionary];
NSString *selectorName = infoDotPlist[@"StandardValue"];
SEL selector = NSSelectorFromString(selectorName);
NSNumber *result = [Constants performSelector:selector];
以及选择器名称将如何存储在信息 plist 中:
<key>StandardValue</key>
<string>someValueForACertainInstance</string>