У меня есть приложение MVC. Модель имеет свойство, которое является структурой NSSize
. Это перезаписываемо как это:
- (void)setSize:(NSSize)aSize;
Представление устанавливает это NSSize
использование кодирования значения ключа. Однако Вы не можете код значения ключа структура, таким образом, я перенес его в NSValue
- возразите как это:
[theView setValue:[NSValue valueWithSize:mySize]
forKey:@"theModel.size"];
К моему пониманию это не должно работать, так как средство доступа ожидает структуру и не NSValue
. Но это работает отлично. Волшебно.
Как это возможно?
Прокрутите вниз до " Обертывание и разворачивание структур ", но вот суть:
setValue: forKey:
определяет тип данных, требуемый для соответствующего метода доступа или переменной экземпляра для указанного ключа. Если тип данных не является объектом, то значение извлекается из переданного объекта с помощью соответствующего метода-
.Value
Кстати, спасибо, что задали этот вопрос! Это одна из тех вещей какао, которая всегда «просто работала», и я никогда не считал, что не очевидно, как это было достигнуто.