最常見的真實生活鍵值編碼示例

金鑰值編碼使用 NSKeyValueCoding 協議整合到 NSObject 中。 ****

這意味著什麼?

這意味著任何 id 物件都能夠呼叫 valueForKey 方法及其各種變體,如 valueForKeyPath 等。

它還意味著任何 id 物件都可以呼叫 setValue 方法及其各種變體。

例:

id obj = [[MyClass alloc] init];
id value = [obj valueForKey:@"myNumber"];

int myNumberAsInt = [value intValue];
myNumberAsInt = 53;
[obj setValue:@(myNumberAsInt) forKey:@"myNumber"];

例外:

上面的例子假設 MyClass 有一個名為 myNumber 的 NSNumber 屬性。如果 myNumber 沒有出現在 MyClass 介面定義中,則可能會在第 2 行和第 5 行引發 NSUndefinedKeyException - 通常稱為:

this class is not key value coding-compliant for the key myNumber.

為什麼這是如此強大:

你可以編寫可以動態訪問類屬性的程式碼,而無需該類的介面。這意味著表檢視可以顯示來自 NSObject 派生物件的任何屬性的值,前提是其屬性名稱是在執行時動態提供的。

在上面的示例中,程式碼也可以在沒有 MyClass 可用的情況下工作,並且 id 型別 obj 可用於呼叫程式碼。