2010-06-16 3 views
1

Je m'attendais à trouver cela dans la classe NSAttributeDescription, mais seulement la valeur par défaut est là.Comment accéder de manière programmatique aux valeurs minimales et maximales définies dans un modèle de données de base conçu avec XCode?

Derrière la scène J'pensais un validationPredicate a été créé, mais en essayant de l'atteindre en utilisant

NSDictionary* dico= [[myManagedObject entity] propertiesByName]; 
NSAttributeDescription* attributeDescription=[dico objectForKey:attributeKey]; 
for (NSString* string in [attributeDescription validationWarnings]) 

me mènera nulle part, pas validationWarnings, pas validationPredicates ...

toute pensée à ce sujet? Edit1: Il semble que obtenir l'entité directement à partir de managedObject ne vous donne pas l'image complète. Obtenir l'entité des permis NSManagedObjectModel pour atteindre les validationWarnings & validationPredicates ...

Edit2:

En utilisant le code suivant juste après la création du modèle liste de tous les validationPredicates du modèle. Pour certaines raisons, l'utiliser plus tard (au moment où j'essaye de valider par exemple) n'affichera rien!

for (NSEntityDescription *entity in managedObjectModel) { 
for (NSAttributeDescription* attributeDescription in [entity propertiesByName]) 
    for (NSPredicate* predicate in [attributeDescription validationPredicates]) 
    { 
     NSLog(@"---%@",[predicate predicateFormat]); 
    } 

} 

Répondre

2

Je pense que vous problème est probablement dû en appelant [entity propertiesByName] qui retourne le dictionnaire de mélange NSAttributeDescription et NSRelationshipDescription. Quand j'ai essayé d'exécuter votre code j'ai obtenu le résultat impair que les objets d'attribut ont été retournés comme NSCFStrings.

Le code suivant fonctionne et notez qu'il produit une sortie même après que le modèle d'objet géré a été gelé par utilisation.

- (void) dumpAttributePredicates{ 

    NSLog(@"start dumpAttributePredicates"); 
    for (NSEntityDescription *entity in managedObjectModel) { 
     NSDictionary *attribs=[entity attributesByName]; 
     for (NSAttributeDescription *eachA in [attribs allValues]) { 
      NSArray *vps=[eachA validationPredicates]; 
      for (NSPredicate *p in vps) { 
       NSLog(@"p =%@",[p predicateFormat]); 
      } 
     }  
    } 
    NSLog(@"end dumpAttributePredicates"); 
} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 
    [self dumpAttributePredicates]; 
    NSManagedObject *mo=[NSEntityDescription insertNewObjectForEntityForName:@"TestEntity" inManagedObjectContext:self.managedObjectContext]; 
    NSLog(@"mo=%@",mo); 
    [self dumpAttributePredicates]; 
} 

qui produit cette sortie:

start dumpAttributePredicates 
p =SELF >= 0 
p =SELF <= 100 
p =length >= 0 
p =length <= 100 
end dumpAttributePredicates 

mo=<NSManagedObject: 0x10016f490> (entity: TestEntity; id: 0x10016f540 <x-coredata:///TestEntity/tA91445DF-4669-4018-A761-7383E3A73EF42> ; 
data: { 
    attributeOne = 0; 
    attributeTwo = nil; 
}) 

start dumpAttributePredicates 
p =SELF >= 0 
p =SELF <= 100 
p =length >= 0 
p =length <= 100 
end dumpAttributePredicates 

Assurez-vous que vous ne confondez pas avec des entités NSManagedObject ou ses sous-classes. Les entités sont des analogues de classes, et non des instances, et une entité n'existe qu'au sein d'un modèle d'objet géré qui, à son tour, peut être un attribut d'un contexte d'objet géré.

Questions connexes