我有一个PList,我在字典中加载了几行数据。我想添加一行像
<key>StandardValue</key>
<string>STANDARDVALUEFORCERTAININSTANCE</string>
现在当我读出值时,我得到一个NSString。如何获得我之前使用
定义的常量的值#define STANDARDVALUEFORCERTAININSTANCE 123
有没有办法获得字符串的常量表示?所以基本上解析它?
答案 0 :(得分:0)
你不能这样做。我建议一个不错的选择:KVC。
您将此变量声明为类实例:
@property (nonatomic,assign) int standardValueForCertainInstance;
然后使用valueForKey获取值:
NSString* key= dict[@"StandardValue"];
int value= [[self valueForKey: key] intValue];
答案 1 :(得分:0)
你想要做的事情是不可能的。使用#define
创建的常量仅存在于编译时,并且在运行时无法通过名称访问它们 - 它们已经转换为常量值。
可能存在的一种替代方法是定义一些返回常量值的方法,比如在Constants
类中。然后,在运行时,从plist加载方法的名称,并使用NSSelectorFromString()
和performSelector:
进行调用。
然而,可能的问题是,为了安全performSelector:
,您必须将所有常量重写为Objective-C对象(因为performSelector:
返回类型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];
选择器名称将如何存储在info plist中:
<key>StandardValue</key>
<string>someValueForACertainInstance</string>