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存在する可能性のある代替手段の 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>
于 2013-01-13T17:50:25.997 に答える