2010-03-22 24 views
20

我有一個MVC應用程序。該模型具有屬性struct NSSize。它是可寫的是這樣的:NSValue如何發揮它的魔力?

- (void)setSize:(NSSize)aSize; 

視圖使用鍵 - 值編碼設置此NSSize。但是,你不能鍵 - 值碼的結構,所以我把它包在NSValue -object這樣的:

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

據我瞭解,這不應該工作,因爲訪問需要一個結構,而不是一個NSValue 。但它完美地工作。奇妙的。

這怎麼可能?

+1

+1這是一個很好的問題,因爲鍵值編碼是關於Cocoa框架真正*真棒*的東西之一。另外,爲「魔術」標籤+1! – 2010-03-22 21:36:57

回答

12

向下滾動到「Wrapping and Unwrapping Structs」,但這裏的要點是:

setValue:forKey:確定由相應的訪問者或實例變量指定鍵所需要的數據類型。如果數據類型不是對象,則使用適當的-<type>Value方法從傳入的對象中提取值。

順便說一句,感謝您提出這個問題!這是那些總是「剛剛起作用」的可可東西之一,我從來沒有認爲它是如何完成的並不明顯。

+0

不客氣。坦率地說,當它突然「剛剛起作用」時,它將我吹走了。 – bastibe 2010-03-22 20:58:42