Использование executeSelector: для доступа к свойству BOOL
Я использую performSelector:
, который возвращает id
объект, чтобы вызвать несколько других методов. Тип возвращаемого значения этих методов может быть BOOL
, int
, NSDate
или любой другой вид объекта.
Как я могу выяснить, вернулся ли объект с performSelector:
это BOOL
или нет? Я пытался преобразовать его в NSNumber
и такое, но это падает, если объект не является BOOL
,
У меня есть класс с такими атрибутами, как эти:
@property(retain,nonatomic) NSString* A;
@property(assign,nonatomic) BOOL B;
@property(retain,nonatomic) NSArray* C;
@property(assign,nonatomic) int64_t D;
Этот класс генерируется фреймворком, поэтому я не могу его изменить. Но я хочу перебрать A
, B
, C
, D
вызывать каждый атрибут и извлекать данные. Однако, как вы можете видеть, тип возвращаемого значения может варьироваться, и мне нужно приспособиться к нему.
Я делаю что-то похожее на:
SEL s = NSSelectorFromString(@"A");
id obj = [object performSelector:s];
//check if obj is BOOL
//do something with obj
1 ответ
Если все, что вам нужно сделать, это получить значения различных свойств, используйте кодирование ключ-значение, которое автоматически оборачивает скалярные типы, такие как int
а также BOOL
в случаях NSNumber
, Так что все, что вам нужно, это строка вроде следующего:
id value = [object valueForKey:@"somePropertyName"];
В противном случае вы могли бы заранее проверить тип возвращаемого значения, вызвав methodSignatureForSelector:
на целевом объекте, но это кажется кучей ненужной работы, учитывая ситуацию, которую вы описали.