2

NSString の値にちなんで名付けられたオブジェクトを作成することは可能ですか? もしそうなら、どのように?

4

3 に答える 3

3

これを試して:

Class theClass = NSClassFromString(someString);
id object = [[theClass alloc] init];
于 2009-05-29T20:33:14.807 に答える
1

文字列がクラス名を指定していることを意味する場合は、NSClassFromString関数を使用して適切なクラス「ファクトリ」オブジェクトを検索することでこれを簡単に行うことができます。

NSString* myClassName = @"NSNumber";
id myNewObject = [[NSClassFromString(myClassName) alloc] init];

// myNewObject is an NSNumber...

例は考案されていますが、あなたはその考えを理解しています。

于 2009-05-29T20:33:39.423 に答える
1

はい:

//In your header
extern NSString *FrobnitzerCalibrationHigh;
extern NSString *FrobnitzerCalibrationMedium;
extern NSString *FrobnitzerCalibrationLow;

//In your implementation
NSString *FrobnitzerCalibrationHigh = @"FrobnitzerCalibrationHigh";
NSString *FrobnitzerCalibrationMedium = @"FrobnitzerCalibrationMedium";
NSString *FrobnitzerCalibrationLow = @"FrobnitzerCalibrationLow";

いくつかのマクロを作成して、それらをプレフィックス ヘッダーに入れることができます。

//Semicolons intentionally omitted (see below)
#define DECLARE_STRING_CONSTANT(name) extern NSString *name
#define DEFINE_STRING_CONSTANT(name) NSString *name = @#name

次に、それらをクラス ヘッダーと実装で使用します。

//In your header
DECLARE_STRING_CONSTANT(FrobnitzerCalibrationHigh);
DECLARE_STRING_CONSTANT(FrobnitzerCalibrationMedium);
DECLARE_STRING_CONSTANT(FrobnitzerCalibrationLow);

//In your implementation
DEFINE_STRING_CONSTANT(FrobnitzerCalibrationHigh);
DEFINE_STRING_CONSTANT(FrobnitzerCalibrationMedium);
DEFINE_STRING_CONSTANT(FrobnitzerCalibrationLow);

(マクロはセミコロンを省略します。なぜなら、マクロにセミコロンも含まれている場合、展開はextern NSString *FrobnitzerCalibrationHigh;;— この場合は無害ですが、他の場合には無害ではないことが主な理由です。 .)

于 2009-05-29T21:26:17.740 に答える