Как NSValue делает свое волшебство?

У меня есть приложение MVC. Модель имеет свойство, которое является структурой NSSize. Это перезаписываемо как это:

- (void)setSize:(NSSize)aSize;

Представление устанавливает это NSSize использование кодирования значения ключа. Однако Вы не можете код значения ключа структура, таким образом, я перенес его в NSValue- возразите как это:

[theView setValue:[NSValue valueWithSize:mySize]
           forKey:@"theModel.size"];

К моему пониманию это не должно работать, так как средство доступа ожидает структуру и не NSValue. Но это работает отлично. Волшебно.

Как это возможно?

20
задан Jonathan Leffler 26 May 2015 в 05:04
поделиться

1 ответ

Прокрутите вниз до " Обертывание и разворачивание структур ", но вот суть:

setValue: forKey: определяет тип данных, требуемый для соответствующего метода доступа или переменной экземпляра для указанного ключа. Если тип данных не является объектом, то значение извлекается из переданного объекта с помощью соответствующего метода - Value .

Кстати, спасибо, что задали этот вопрос! Это одна из тех вещей какао, которая всегда «просто работала», и я никогда не считал, что не очевидно, как это было достигнуто.

12
ответ дан 30 November 2019 в 01:28
поделиться