2

@implementation ファイルに次のような定数文字列が定義されています。

static NSString * const contentDisplayDateKeyPath   = @"content.display_date";
static NSString * const contentIDKeyPath            = @"content.id";

実行時に変数の名前を保持する文字列を使用して contentDisplayDateKeyPath の内容を取得できますか?

元:

NSString *constantName = @"contentDisplayDateKeyPath"

[self valueForKey:constantName] 

次に、 content.display_date を取得します

これは達成できますか?

CFBundleGetDataPointer を使用してこれを達成しようとしています

    CFBundleRef mainBundle = CFBundleGetBundleWithIdentifier(CFBridgingRetain([[NSBundle mainBundle] bundleIdentifier]));
    void *stringPointer = CFBundleGetDataPointerForName(mainBundle, CFBridgingRetain(obj));
    NSString *string = (__bridge NSString *)stringPointer;

ただし、stringPointer は常に null です。

手伝ってくれてありがとう

4

4 に答える 4

2

これでうまくいくはずです。

NSString *__autoreleasing *string = (NSString*__autoreleasing*)dlsym(RTLD_DEFAULT, "<name of constant like PKPaymentNetworkVisa>");
NSLog(@"%@", *string);
于 2015-06-26T18:06:47.433 に答える
0

キーを定数名とし、値を定数値とするマップを使用します。

static NSDictionary *_constants = @{

    @"contentDisplayDateKeyPath" : @"content.display_date",
    @"contentIDKeyPath"          : @"content.id",
    // etc.
};

...

NSString *constantName = @"contentDisplayDateKeyPath";
NSString *constantValue = _constants[constantName];
于 2013-11-13T09:43:13.230 に答える
0

もう 1 つのオプションは、これをシングルトン オブジェクトにカプセル化し、読み取り専用プロパティを介して定数にアクセスすることです。私のObjective-Cシングルトンはどのように見えるべきですか? をチェックしてください。シングルトンの設計パターンを表示します。

于 2013-11-13T09:47:59.400 に答える
0

この質問はここで答えられました:

Objective-C で実行時に文字列定数を検索するにはどうすればよいですか?

ソリューションは私にとって完璧に機能しました。

CFBundleGetDataPointerForName実行時に定数の値を検索するために使用できます

-(NSString *)lookupStringConstant:(NSString *)constantName 
{

    void ** dataPtr = CFBundleGetDataPointerForName(CFBundleGetMainBundle(), (__bridge CFStringRef)constantName);
    return (__bridge NSString *)(dataPtr ? *dataPtr : nil);
}
于 2016-01-26T05:32:28.253 に答える