2012-09-05 40 views
2

這是什麼?使用瞬態屬性時需要什麼原語?

我不知道我很明白這是幹什麼的。

- (NSString *)sectionIdentifier { 

    [self willAccessValueForKey:@"sectionIdentifier"]; 
    NSString *tmp = [self primitiveSectionIdentifier]; 
    [self didAccessValueForKey:@"sectionIdentifier"]; 

    if (!tmp) { 

     tmp = @"bananas"; 

     [self setPrimitiveSectionIdentifier:tmp]; 
    } 
    return tmp; 
} 

爲什麼我需要這個primitiveSectionIdentifier

最終,我使用Apple文檔中的示例項目來創建節標識符,以與我的NSFetchedResultsController一起使用。

雖然這可行。我對自己說,

sectionIdentifier」 將被訪問,然後 我設置 「TMP」 到primitiveSectionIdentifier。但是在這一點上,primitiveSectionIdentifier沒有任何東西!可以?

然後我說我沒有訪問「sectionIdentifier」。但是我不明白「Will」和「Did」之間會發生什麼。

有人可以幫我理解嗎?

+0

如果之前調用過'setSectionIdentifier',調用'-primitiveSectionIdentifier'將返回一個值。這基本上是說'是'sectionIdentifier'設置爲一個值?如果不是,將其設置爲'bananas'「。你在問什麼? – nielsbot

+0

在某種程度上,是的。我無法理解對原始的需求,並且它的目的。讓一切變得更加混亂。謝謝你,先生。 – nmdias

回答

3

[self primitiveSectionIdentifier]是一個所謂的「原始訪問器」(參見核心數據編程指南的詞彙表)。這是實際從持久性存儲中獲取「sectionIdentifier」的值的函數。該功能是由Core Data運行時自動創建的。

willAccessValueForKeydidAccessValueForKey是「通知方法」。根據文檔,它們用於鍵值觀察,保持反向關係等。

所以該模式是:

  1. 告訴大家,你要讀的值。
  2. 閱讀價值。
  3. 告訴大家你已經閱讀了價值。
+0

花了我幾天時間。但我現在明白了。我也錯過了適當的條款。先生非常感謝您。 – nmdias

相關問題