2015-04-17 63 views
1

我正在進行託管對象驗證。到目前爲止,我已完成屬性級驗證。現在我正在思考以上的屬性驗證。我可以通過一個大的if-else控制流來實現,但是想知道是否有更優雅的選項。核心數據:基於謂詞的驗證

我發現NSValidationPredicateErrorKey

對於基於謂詞驗證,謂詞的 條件未能驗證關鍵。

in documentation。

不知何故,我覺得這可能是我的選擇,但我沒有發現這個話題。我搜查了官方文檔,SO,知名博客,Marcus S. Zarra的Core Data書籍。

那麼什麼是基於謂詞的驗證?它甚至存在嗎?如果沒有記錄,它甚至相關嗎?什麼是用例?如果進行內部驗證,那麼示例是什麼?

+0

你的意思是「屬性間驗證」? –

+0

[「驗證屬性級別和屬性間有兩種類型,您使用屬性級別驗證來確保各個值的正確性;您使用屬性間驗證來確保值組合的正確性。」]( http://goo.gl/SyyqJ3) –

回答

0

只需在託管對象子類中覆蓋validateForInsertvalidateForUpdate即可實現屬性間驗證,如文檔here(帶代碼示例)所示。

「基於謂詞」驗證可以通過豐富的託管對象API實現。每個NSManagedObject都有一個關聯的NSEntityDescription(名爲entity的屬性)。通過這個你可以到達每個房產的NSPropertyDescription。屬性描述反過來有一個名爲validationPredicates的屬性,用於驗證的數組NSPredicates。請注意,這些是隻讀的,主要用於在出現驗證錯誤時通知錯誤對象。而且,就我的理解而言,他們無法總是充分描述上述重寫中的驗證。

總之,您找到的這個錯誤鍵並不是真的表明存在一種通用的,基於謂詞的指定驗證約束的方法。相反,您必須在託管對象類中重寫上述方法。

+0

當然。但我的問題是「基於謂詞的驗證」的文檔意味着什麼。 –

+0

對。我延長我的回答來解釋。 – Mundi