あなたがやりたいことは、正確には不可能です。で作成された定数#define
はコンパイル時にのみ存在し、実行時に名前でそれらにアクセスする方法はありません - それらは既に定数値に変換されています。
Constants
存在する可能性のある代替手段の 1 つは、クラスなどで定数値を返す多数のメソッドを定義することです。次に、実行時に plist からメソッドの名前をロードし、 and を使用して呼び出し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];
また、セレクター名が情報 plist に格納される方法は次のとおりです。
<key>StandardValue</key>
<string>someValueForACertainInstance</string>