在我的數據模型中,某些屬性具有用於數據驗證的正則表達式。我的代碼中有些地方我想使用這些相同的正則表達式。爲了讓我的公共正則表達式保持在一個地方,我希望既可以在代碼中設置這些正則表達式,也可以從代碼中的數據模型中檢索這些正則表達式。獲取NSManagedObject屬性驗證正則表達式
有沒有辦法做到這一點?
我想訪問Reg。防爆。屬性,如下所示,代碼中。
在我的數據模型中,某些屬性具有用於數據驗證的正則表達式。我的代碼中有些地方我想使用這些相同的正則表達式。爲了讓我的公共正則表達式保持在一個地方,我希望既可以在代碼中設置這些正則表達式,也可以從代碼中的數據模型中檢索這些正則表達式。獲取NSManagedObject屬性驗證正則表達式
有沒有辦法做到這一點?
我想訪問Reg。防爆。屬性,如下所示,代碼中。
從NSEntityDescription
您可以使用方法attributesByName
獲取其屬性。然後,您可以使用NSPropertyDescription
方法validationPredicates
和setValidationPredicates:withValidationWarnings:
。我認爲當你在你的數據模型文件中設置驗證正則表達式時,在謂語中創建一個謂詞......
我不完全確定這一點,但我認爲你只能在創建核心時設置這些值數據模型,而不是一旦你有你的核心數據堆棧設置。那是你想要做的嗎?
絕對。在模型編輯器中執行的所有操作都可以通過操作NSManagedObjectModel
對象在代碼中完成或修改。
找到您的核心數據堆棧設置(可能在您的應用程序委託)檢索模型的位置。在返回模型之前,在代碼中修改它,使用常量,可以在中央包含文件中使用#define
。
閱讀所有關於對象模型的API here。更確切地說,您在修改實體描述後,通過更改的其中一個attributes
來設置模型的entities
。
我將e1985的答案標記爲已接受,因爲這就是讓我來這裏的答案。這是我用來獲取謂詞的代碼。它在NSEntityDescription的類別中。
- (NSPredicate*)getValidationPredicateForAttribute:(NSString*)attributeName
{
NSAttributeDescription* emailAttribute = [self.attributesByName objectForKey:attributeName];
NSArray* validationPredicates = [emailAttribute validationPredicates];
if(validationPredicates.count > 0)
{
return [validationPredicates objectAtIndex:0];
}
return nil;
}
正如你所暗示的那樣,這個屬性只是可變的_before_被管理的對象模型已被分配給持久存儲協調器。 – Aderstedt
這很好,我不能在這裏編輯正則表達式;我能夠得到謂詞的事實對我來說已經足夠了。這個想法是能夠在一個地方定義正則表達式並從任何地方訪問它。用你的答案,我可以在xcdatamodel中定義它。 – Aaron