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