Свойство Access Objective-C динамично с помощью названия свойства

Я знаю имя строки свойства объекта. Как я пошел бы о получении и установке того свойства с помощью строки?

25
задан Josh Caswell 15 January 2015 в 23:25
поделиться

2 ответа

Хотя @weichsel правильный, есть и лучший способ.

Использовать:

[anObject valueForKey: @"propertyName"];

и

[anObject setValue:value forKey:@"propertyName"];

Очевидно, что @"имя свойства" может быть NSString, который динамически составляется во время выполнения.

Эта техника называется Key Value Coding и является фундаментальной для какао.

Почему это лучше, потому что -valueForKey сделает то, что необходимо для "бокса" любого типа свойства, возвращаемого в объект. Таким образом, если свойство имеет тип int, то возвращается экземпляр NSNumber, содержащий int.

С этим гораздо проще справиться -- performSelector будет работать только для типов, которые случаются, чтобы поместиться в память указателя.

Обратите внимание, что есть также -setValue:forKey:.

.
51
ответ дан 28 November 2019 в 20:43
поделиться

@синтезировать свойствоName автоматизирует генерацию методов геттера и сеттера.

Компилятор генерирует

  • - (id)propertyName;
  • - (void)setPropertyName;

Если в качестве NSString используется селектор, то можно использовать performSelector:NSSelectorFromString.
. например:
[объект performSelector:NSSelectorFromString(@"имя свойства") ...]

2
ответ дан 28 November 2019 в 20:43
поделиться