Как NSValue делает свое волшебство? - PullRequest
20 голосов
/ 22 марта 2010

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

- (void)setSize:(NSSize)aSize;

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

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

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

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

1 Ответ

12 голосов
/ 22 марта 2010

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

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

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

...