NSValue如何发挥其魔力?

bas*_*ibe 20 struct objective-c key-value-coding

我有一个MVC应用程序.该模型具有一个结构属性NSSize.这是可写的:

- (void)setSize:(NSSize)aSize;
Run Code Online (Sandbox Code Playgroud)

视图NSSize使用键值编码设置它.但是,你不能对结构进行键值编码,所以我把它包装在一个NSValue像这样的对象中:

[theView setValue:[NSValue valueWithSize:mySize]
           forKey:@"theModel.size"];
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该不起作用,因为访问器需要一个结构而不是一个结构NSValue.但它完美无缺.奇妙的.

这怎么可能?

kub*_*ubi 12

向下滚动到" Wrapping and Unrarapping Structs ",但这里是要点:

setValue:forKey:确定指定键的相应访问者或实例变量所需的数据类型.如果数据类型不是对象,则使用适当的-<type>Value方法从传递的对象中提取值.

顺便说一句,谢谢你提出这个问题!这是那些一直"正常工作"的可可物之一,我从未认为它是如何完成的并不明显.