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

Как NSValue делает свою магию?

У меня есть приложение MVC. Модель имеет свойство, которое является структурой NSSize. Он доступен для записи следующим образом:

- (void)setSize:(NSSize)aSize;

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

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

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

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

4b9b3361

Ответ 1

Прокрутите вниз до " Wrapping and Unwrapping Structs", но вот суть:

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

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