2009-05-29 9 views

答えて

3

これを試してください:あなたは、文字列は、クラス名を指定していることを意味している場合

Class theClass = NSClassFromString(someString); 
id object = [[theClass alloc] init]; 
1

、[はい、それは適切なクラスを検索するNSClassFromString機能を使って、これを行うのは簡単だ「工場」オブジェクト:

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

// myNewObject is an NSNumber... 

例は設計されていますが、あなたはその考えを得ています。

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"; 

あなたはマクロのカップルを作り、自分のプレフィックスヘッダにそれらを置くことができます。

//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); 

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

は、その後、あなたのクラスのヘッダーおよび実装にそれらを使用します

(マクロではセミコロンを使用しないため、セミコロンは省略されています。この場合、展開はextern NSString *FrobnitzerCalibrationHigh;; - 無意味ですが、他の場合はほとんど無害でないため、これを行うと私には不具合が生じます。

関連する問題