私のデータ モデルでは、一部の属性にデータ検証に使用される正規表現が含まれています。私のコードには、同じ正規表現を使用したい場所があります。
一般的な正規表現を 1 か所に保持するために、これらの正規表現をコードで設定するか、コードでデータ モデルから取得することを望んでいました。
これを行う方法はありますか?
Regにアクセスしたい。元。以下に示すプロパティをコードで示します。
からNSEntityDescription
メソッドで属性を取得できますattributesByName
。NSPropertyDescription
その後、メソッドvalidationPredicates
とを使用できますsetValidationPredicates:withValidationWarnings:
。データモデルファイルで検証正規表現を設定すると、内部で述語が作成されると思います...
これについては完全にはわかりませんが、これらの値を設定できるのは、コア データ モデルを作成するときだけであり、コア データ スタックをセットアップした後ではないと思います。それがあなたのやりたいことですか?
絶対。モデル エディターで行うことはすべて、NSManagedObjectModel
オブジェクトを操作することでコードで実行または変更できます。
コア データ スタックのセットアップでモデルが取得されている場所を見つけます (おそらくアプリ デリゲート内)。#define
モデルを返す前に、中央のインクルード ファイルで使用できる定数を使用して、コードでモデルを変更します。
オブジェクト モデルの API の詳細については、こちらをご覧ください。より正確にはentities
、エンティティの説明を変更した後、validationPredicates
そのの の を変更して、モデルの を設定しattributes
ます。
それが私をここに導いた答えだからです。述語を取得するために使用したコードは次のとおりです。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;
}