Подтвердить что ты не робот

Доступ к ресурсу Objective-C динамически с использованием имени свойства

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

4b9b3361

Ответ 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") ...]