我有一个充满#define
个宏值的数组。我还有一个带有字典的plist文件(字典),每个字典都与#define
宏名称相同。我从plist文件中获取字典的名称,并将它们放在NSString中。现在,我需要将字符串(等于宏的名称)转换为实际的宏值。然后我需要将完整值的数组与.plist文件中指定的宏的值进行比较,并检查它是否相等。例如,请参阅代码。
我该怎么做?
#define ACHIEVEMENT1_ID (ISIPAD() ? @"com.company.blablaHD.id" : @"com.company.blabla.id")
#define ACHIEVEMENT2_ID ....
......
- (void)checkPlistAndKnownIdentifiers:(NSDictionary *)_plistDictionary {
NSArray *_knownIdentifiers = @[ACHIEVEMENT1_ID, ACHIEVEMENT2_ID, ...];
NSArray *_plistDictionariesNames = [_plistDictionary allKeys];
for (int idx = 0; idx < [_knownIdentifiers count]; idx++) {
if (_knownIdentifiers[idx] == _plistDictionariesNames[idx]){
// _knownIdentifiers[idx] returns @"com.company.blabla.id", for example
// but _plistDictionariesNames[idx] returns @"ACHIEVEMENT1_ID", that is the problem
} else {
assert(NO);
}
}
}
可能会有一些错误,因为我是从记忆中写的,但你应该得到一般的想法。
另外,我不想在这里使用extern const字符串,所以这就是我寻求帮助的原因:)
答案 0 :(得分:3)
如果我理解你的问题;您希望能够在运行时使用宏名称。 这实际上是不可能的,因为预处理器计算宏,并在实际编译之前替换它。 您的宏名称在运行时不再存在