我有一个MVC应用程序。该模型具有结构NSSize
的属性。这是可写的:
- (void)setSize:(NSSize)aSize;
视图使用键值编码设置此NSSize
。但是,您不能对结构进行键值编码,因此我将其包装在NSValue
对象中,如下所示:
[theView setValue:[NSValue valueWithSize:mySize]
forKey:@"theModel.size"];
根据我的理解,这应该不起作用,因为访问者需要一个结构而不是NSValue
。但它完美无缺。神奇。
这怎么可能?
答案 0 :(得分:12)
向下滚动到“Wrapping and Unwrapping Structs”,但这是要点:
不过,谢谢你提出这个问题!这是那些一直“正常工作”的可可物之一,我从未认为它是如何完成的并不明显。
setValue:forKey:
确定指定键的相应访问者或实例变量所需的数据类型。如果数据类型不是对象,则使用适当的-<type>Value
方法从传递的对象中提取值。