2011-09-15 38 views
17

Core Data Programming Guide(我的重點):什麼是核心數據中的「原始」訪問器?

默認情況下,核心數據動態創建高效公共原始獲取和管理對象類的模型屬性(屬性和關係)設置訪問方法。

雖然我已經使用核心數據和mogenerator愉快,因爲我開始對Objective-C的過,我從來沒有一起來看看這是什麼意思,直到提交的應用得到了拒絕因涉嫌使用私有API的。關於生成的setPrimitiveTypeValue:方法的長話,但不是我的問題。

在閱讀指南時,我偶然發現了實體屬性的公共和基本訪問器的概念。另一個報價,但進一步向下:

例如,給定的實體與屬性firstName,核心數據自動生成firstNamesetFirstName:primitiveFirstName,和setPrimitiveFirstName:

什麼是原始訪問器?這是否只是你可以直接分配一個BOOL值,而不是將其包含在NSNumber中?如果是這樣,mogenerator爲什麼會經歷生成各種各樣的<Attribute>Value,set<Attribute>Value:,primitive<Attribute>Value,setPrimitive<Attribute>Value:訪問器的麻煩?

我很困惑,誰能幫助我?


相關問題:

+0

別人[已經回答了這一個] [1]的看上去像是一個很好的答案。 [1]:http://stackoverflow.com/questions/5509106/why-would-i-need-to-use-a-primitive-accessor-methods-in-a-core-data-項目 – Simon

回答

10

據我的理解,原始的方法進行實際的獲取和設置,但不會發出任何KVC或KVO通知('willAccessValueForKey'等)。公共方法調用原始方法,但將呼叫包裝在KVO呼叫中。因此,從對象外部開始,通常會調用公共方法,但如果由於內部原因需要使用對象的屬性(例如驗證或派生其他屬性),則可以使用基本方法來避免觸發所有的通知。

我希望能在答案任何更正或澄清,因爲它是一個問題,我很感興趣,但在沒有完全熟悉。

+0

真棒回答@jrturton。剛加入這個鏈接作爲參考,如果人們想擁有的[自定義原始存取方法]快看(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html #// apple_ref/doc/uid/TP40002154-SW5)在覈心數據文檔中備份您的答案。 – Mick

+1

@Patt哇這一定是我的第一個SO答案之一!從過去的爆炸... – jrturton

+0

@Mick現在鏈接已過時。 – ThomasW

0

@關於自定義jrturton的答案涉及的問題屬性一對一的關係訪問器方法,其中公共訪問器很簡單。

此外,爲全力支持一對多的關係訪問者,在定製的實現,公共存取可能不得不調用組合原始-存取與方法的NSMutableSet(unionSet:和minusSet :),必須將內包裝KVO方法對(將......做......)。

相關問題