Доступ к свойству 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") ...]

Другие вопросы по тегам