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