Est-il possible de créer un objet nommé d'après la valeur d'un NSString? Si c'est le cas, comment?Création d'un objet nommé d'après la valeur d'un NSString - est-ce possible?
2
A
Répondre
3
Essayez ceci:
Class theClass = NSClassFromString(someString);
id object = [[theClass alloc] init];
1
Si vous voulez dire que la chaîne indique le nom de la classe, alors oui il est facile de le faire en utilisant la fonction NSClassFromString pour rechercher l'objet classe appropriée « usine »:
NSString* myClassName = @"NSNumber";
id myNewObject = [[NSClassFromString(myClassName) alloc] init];
// myNewObject is an NSNumber...
L'exemple est artificiel, mais vous avez l'idée.
1
Oui:
//In your header
extern NSString *FrobnitzerCalibrationHigh;
extern NSString *FrobnitzerCalibrationMedium;
extern NSString *FrobnitzerCalibrationLow;
//In your implementation
NSString *FrobnitzerCalibrationHigh = @"FrobnitzerCalibrationHigh";
NSString *FrobnitzerCalibrationMedium = @"FrobnitzerCalibrationMedium";
NSString *FrobnitzerCalibrationLow = @"FrobnitzerCalibrationLow";
Vous pouvez faire quelques macros et de les mettre dans votre tête préfixe:
//Semicolons intentionally omitted (see below)
#define DECLARE_STRING_CONSTANT(name) extern NSString *name
#define DEFINE_STRING_CONSTANT(name) NSString *name = @#name
les utiliser dans vos en-têtes de classe et les implémentations:
//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);
(Les macros omettent les points-virgules car leurs utilisations les fournissent. Eh bien, l'expansion serait extern NSString *FrobnitzerCalibrationHigh;;
-aussi bien dans ce cas, mais ça m'embêterait si je le faisais, surtout parce que ce n'est pas anodin dans d'autres cas.)