[英]KVC - key value coding with dot seperation - Exception not KVC compliant
@interface MyClass: NSObject
@property NSArray *arr;
@end
@inplementation MyClass
- (instancetype) init
{
if(self = [super init])
{
self.arr = [[NSArray alloc] init];
}
return self;
}
@end
int main(int argc, char *argv[])
{
MyClass *temp = [[MyClass alloc] init];
[temp valueForKey:@"arr.count"]; //count is ivar of NSArray
return 0;
}
然后控制台說
NSExceptions:[MyClass valueForUnfinedKey:]此類不是鍵arr.count的鍵值投訴
每當我使用點分隔符時,都會出現此exceptions
。
我試圖搜索網絡並閱讀菜單,但我仍然不知道為什么,有人可以幫忙嗎? 謝謝。
方法valueForKey:
采用一個鍵(屬性或局部變量)名稱,而不采用諸如arr.count
類的鍵路徑。
方法valueForKeyPath:
確實采用了密鑰路徑,它實際上是valueForKey:
調用的序列。 請參閱關於鍵值編碼中的 使用鍵獲取屬性值 。
但是 ,由於為NSArray
定義valueForKey:
的方式,您的示例仍然無法使用:
返回一個數組,該數組包含調用valueForKey:在每個數組對象上使用key的結果。
因此,在您的情況下,如果您嘗試valueForKeyPath:@"arr.count"
,則路徑的arr
部分將返回您的數組,然后NSArray
的valueForKey:
將嘗試獲取該數組的每個元素的count
鍵,而不是數組本身。 不是你想要的...
這使我們遇到了集合運算符 ,后者提供了對集合,數組(而不是其元素)起作用的關鍵路徑。 您需要的集合運算符是@count
為您提供關鍵路徑arr.@count
,因此您需要調用:
[temp valueForKeyPath:@"arr.@count"]
除非這是學習KVC的練習,否則可以簡化為:
temp.arr.count
這沒有嘗試將count
應用於數組元素的問題,並返回NSUInteger
值而不是NSNumber
實例。
HTH
這是因為arr.count
不是MyClass的鍵值投訴。 程序運行時,找不到MyClass名稱arr.count
任何屬性。
valueForKeyPath:-返回相對於接收者的指定密鑰路徑的值。 密鑰路徑序列中不符合特定鍵的鍵值編碼的任何對象(即valueForKey:的默認實現無法找到訪問器方法)都接收到valueForUndefinedKey:消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.