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