2012-02-08 43 views
1

我在這行代碼:iPhone - 的setValue:forkey:沒有記錄

[defaults setValue:someValue forKey:@"someValue"]; 
[animationGroup setValue:@"someValue" forKey:@"someValue"]; // CAAnimationGroup 
NSString* animName = [theAnimation valueForKey:@"someValue"]; // CAAnimation 

但閱讀蘋果的參考文檔:

我沒有看到任何對這些方法的引用,甚至是解析層次結構或一致的協議。他們從哪裏來?他們的使用是否允許?

回答

4

這些是鍵值編碼方法;如果這些類是與這些密鑰兼容的鍵值編碼,那麼您可以毫無問題地使用它們。關於Core Animation,CALayerCAAnimation均符合KVC標準,詳見this programming guide。有關更多一般信息,請參閱NSKeyValueCoding非正式協議和Key-Value Coding Programming Guide

+0

你知道爲什麼NSKeyValueCoding協議在這些類的「符合」部分中沒有引用嗎? – Oliver 2012-02-08 10:39:29

+3

'NSKeyValueCoding'是一個非正式協議,它定義爲'NSObject'上的類別(參見'NSKeyValueCoding.h'頭文件),而不是顯式協議,因爲實現是可選的。 – 2012-02-08 10:45:07

2

作爲一個側面說明,讓我困惑。其中一個環節上面規定:

雙方的CALayer和CAAnimation是鍵 - 值編碼兼容的容器類 ,讓您任意鍵設定值。也就是說,雖然 關鍵「someKey」不是的CALayer類, 但是你仍然可以設置鍵「someKey」

這意味着你可以安全地發送KVC樣的setValue的值聲明的屬性:forKey:和valueForKey:消息,而不必擔心@「someKey」不是真正的KVC兼容屬性(因此是「任意鍵」)。如果您在其他對象上嘗試此操作,則可能會引發異常。我承認我不知道如何找出容易如果其他類有這種行爲,它肯定會有用的是在許多其他地方免費有這種行爲。