2009-07-08 112 views
2

我試圖用KVC更新一些屬性。這些屬性已經被合成。可可KVC:「類不是關鍵值編碼兼容」

這條線的工作原理:

myObject.value = intValue; 

這不起作用:

[self setValue:[NSNumber numberWithInt:intValue] forKey:@"myObject.value"]; 

而且隨着炸燬:終止應用程序由於未捕獲的異常 'NSUnknownKeyException',原因:「[< MyViewController 0xd1cec0> setValue:forUndefinedKey:]:該類不是關鍵字值myObject.value。

更進一步的方法(awakeFromNib)同一類的其他實例對setValue:forKey:調用作出了很好的響應。唯一的區別是這個特定的實例是在IB中創建和連接的。

+0

[NSString stringWithFormat:@「myObject.value」]是多餘的,它使用的格式沒有任何參數。你應該使用@「myObject.value」。 –

回答

7

它告訴你,該對象不是一個有效的鍵,事實上它不是:「myObject.value」是一個鍵路徑,而不是一個單一的鍵。

+0

doh。我知道......謝謝! – Meltemi

1

我同意查克。

我認爲你需要做的,而不是:

[self setValue:[NSNumber numberWithInt:intValue] forKeyPath:@"myObject.value"]; 

或通過像關鍵路徑的各個部分:

id myObject = [self objectForKey:@"myObject"]; 
[myObject setValue:[NSNumber numberWithInt:intValue] forKey:@"value"]; 
9

你不可錯過的關鍵路徑作爲第二個參數-[NSObject setValue:forKey:]。你想用setValue:forKeyPath:代替:

[self setValue:[NSNumber numberWithInt:intValue] forKeyPath:@"myObject.value"]; 

我的理解是,setValue:forKey:作爲一個性能優化提供。由於它不能採取關鍵路徑,因此不必解析密鑰字符串。

相關問題