Я знаю имя строки свойства объекта. Как я могу получить и установить это свойство с помощью строки?
Доступ к ресурсу 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") ...]