2012-12-14 82 views
1

蘋果Core Data Utility Tutorial建議實施setNilValueForKey:並測試其效果:setNilValueForKey不是在覈心數據實用教程叫

使用鍵 - 值編碼進程ID設爲零。構建並運行該實用程序。再次,會發生什麼?最後,註釋掉setNilValueForKey:方法並再次測試。

我嘗試使用此代碼將進程ID設置爲零:[run setValue:nil forKey:@"processID"];但這不稱爲setNilValueForKey:。爲什麼不?

這是我的實現;我添加的NSLog語句從不出現。

- (void) setNilValueForKey:(NSString*)key { 
    NSLog(@"setNilValueForKey: %@", key) ; 
    if ([key isEqualToString:@"processID"]) { 
     [self setValue:@0 forKey:key ] ; 
    } 
    else { 
     [super setNilValueForKey:key] ; 
    } 
} 

我找到了similar stackoverflow discussions,但沒有人回答這個問題。

回答

3

如果使用動態生成的存取方法,似乎setNilValueForKey:永遠不會被調用。

如果您提供的 「Run.m」 了 「的ProcessID」 屬性自定義setter方法:

- (void)setProcessID:(NSInteger)processID 
{ 
    [self willChangeValueForKey:@"processID"]; 
    [self setPrimitiveValue:@(processID) forKey:@"processID"]; 
    [self didChangeValueForKey:@"processID"]; 
} 

然後

[run setValue:nil forKey:@"processID"] 

導致setNilValueForKey:被調用。

這只是我嘗試和錯誤經驗,我沒有這方面的官方參考。但自Mac OS X 10.4以來,「核心數據實用程序教程」一直存在,其中動態生成的訪問器方法(據我所知)尚不存在。所以它可能是那個部分約setNilValueForKey:哪裏沒有更新爲10.5。但這純粹是在我身邊猜測。

+0

感謝您的好解釋!我會使用蘋果的「這個文檔對你有幫助嗎?」留下反饋意見。文檔反饋。 –

+1

@ghettopia:不客氣。 - 您也可以在bugreport.apple.com上提交bug,這裏有一個特殊的「文檔」類別。 –