Создание объекта с именем по значению NSString - возможно ли это? - PullRequest
2 голосов
/ 30 мая 2009

Можно ли создать объект, названный в честь значения NSString? Если да, то как?

Ответы [ 3 ]

3 голосов
/ 30 мая 2009

Попробуйте это:

Class theClass = NSClassFromString(someString);
id object = [[theClass alloc] init];
1 голос
/ 30 мая 2009

Да

//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;; - безвредно в этом случае, но если бы я это сделал, меня бы это беспокоило, в основном потому, что не безвреден в некоторых других случаях.)

1 голос
/ 30 мая 2009

Если вы имеете в виду, что строка задает имя класса, то да, это легко сделать с помощью функции NSClassFromString для поиска соответствующего объекта "factory" класса:

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

// myNewObject is an NSNumber...

Пример надуман, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...