要訪問您使用以下兩種方法管理對象的基本價值:
- (id)primitiveValueForKey:(NSString *)key
- (void)setPrimitiveValue:(id)value forKey:(NSString *)key
這通常是用來將NSNumber屬性轉換爲它們的「真實」類型,例如bool屬性:
- (BOOL)isShared
{
[self willAccessValueForKey:@"isShared"];
NSNumber *underlyingValue = [self primitiveValueForKey:@"isShared"];
[self didAccessValueForKey:@"isShared"];
return [underlyingValue boolValue];
}
的willAccessValueForKey:
和didAccessValueForKey:
需要由基礎管理對象類用於處理故障和關係等
如果你這樣做最終會寫一個二傳手,你也必須在包裝方法KVC存取:
- (void)setShared:(BOOL)isShared
{
NSNumber *newUnderlyingValue = [NSNumber numberWithBool:isShared];
[self willChangeValueForKey:@"isShared"];
[self setPrimitiveValue:newUnderlyingValue forKey:@"isShared"];
[self didChangeValueForKey:@"isShared"];
}
話雖如此,我個人不建議你保持相同的方法名稱,除非你有一個很好的理由。對於「派生」值,您通常需要使用不同的名稱創建全新的方法。在整個代碼中快速查找/替換並不需要很長時間。
編輯:添加willAccessValueForKey:/ didAccessValueForKey:(感謝jrturton)
你也需要用括號'willAccessValueForKey您的getter代碼:'和'didAccessValueForKey:'以確保故障在必要時解僱? – jrturton
是的,謝謝我錯過了,我更新了代碼。 –
非常感謝Mike! – Akshay