Доступ к свойству Objective-C динамически, используя имя свойства
Я знаю строковое имя свойства объекта. Как мне получить и установить это свойство, используя строку?
2 ответа
Хотя @weichsel верен, есть лучший способ.
Использование:
[anObject valueForKey: @"propertyName"];
а также
[anObject setValue:value forKey:@"propertyName"];
Очевидно, что @"propertyName"
может быть NSString
это динамически составлено во время выполнения.
Этот метод называется кодированием значения ключа и является фундаментальным для какао.
Почему это лучше, потому что -valueForKey
будет делать то, что необходимо для "упаковки" любого типа, который свойство возвращает объекту. Таким образом, если свойство имеет тип int
Вернусь NSNumber
экземпляр, содержащий int.
С этим гораздо легче иметь дело - performSelector
будет работать только для типов, которые вписываются в память указателя.
Обратите внимание, что есть также -setValue:forKey:
,
@synthesize propertyName
автоматизирует генерацию методов получения и установки.
Компилятор генерирует
- (id)propertyName;
- (void)setPropertyName;
Если у вас есть селектор NSString, вы можете использовать performSelector:NSSelectorFromString
,
например:[object performSelector:NSSelectorFromString(@"propertyName") ...]