0

我有一个 PList,我在字典中加载了几行数据。我想添加一行

<key>StandardValue</key>
<string>STANDARDVALUEFORCERTAININSTANCE</string>

现在,当我读出值时,我得到一个 NSString。如何获得我之前定义的常量的值

#define STANDARDVALUEFORCERTAININSTANCE 123

有没有办法获得字符串的常量表示?所以本质上要解析它?

4

2 回答 2

0

你不能这样做。我建议一个不错的选择:KVC。

您将此变量声明为类实例:

@property (nonatomic,assign) int standardValueForCertainInstance;

然后你用 valueForKey 得到值:

NSString* key= dict[@"StandardValue"];
int value= [[self valueForKey: key] intValue];
于 2013-01-13T14:33:37.077 回答
0

你想做的事情并不完全可能。创建的常量#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>
于 2013-01-13T17:50:25.997 回答