2013-07-29 31 views
1

在我的數據模型中,某些屬性具有用於數據驗證的正則表達式。我的代碼中有些地方我想使用這些相同的正則表達式。爲了讓我的公共正則表達式保持在一個地方,我希望既可以在代碼中設置這些正則表達式,也可以從代碼中的數據模型中檢索這些正則表達式。獲取NSManagedObject屬性驗證正則表達式

有沒有辦法做到這一點?

我想訪問Reg。防爆。屬性,如下所示,代碼中。

I want to access the Reg. Ex. property in code

回答

2

NSEntityDescription您可以使用方法attributesByName獲取其屬性。然後,您可以使用NSPropertyDescription方法validationPredicatessetValidationPredicates:withValidationWarnings:。我認爲當你在你的數據模型文件中設置驗證正則表達式時,在謂語中創建一個謂詞......

我不完全確定這一點,但我認爲你只能在創建核心時設置這些值數據模型,而不是一旦你有你的核心數據堆棧設置。那是你想要做的嗎?

+1

正如你所暗示的那樣,這個屬性只是可變的_before_被管理的對象模型已被分配給持久存儲協調器。 – Aderstedt

+0

這很好,我不能在這裏編輯正則表達式;我能夠得到謂詞的事實對我來說已經足夠了。這個想法是能夠在一個地方定義正則表達式並從任何地方訪問它。用你的答案,我可以在xcdatamodel中定義它。 – Aaron

1

絕對。在模型編輯器中執行的所有操作都可以通過操作NSManagedObjectModel對象在代碼中完成或修改。

找到您的核心數據堆棧設置(可能在您的應用程序委託)檢索模型的位置。在返回模型之前,在代碼中修改它,使用常量,可以在中央包含文件中使用#define

閱讀所有關於對象模型的API here。更確切地說,您在修改實體描述後,通過更改的其中一個attributes來設置模型的entities

0

我將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; 
}