2010-11-27 14 views
0

Question débutant standard. J'ai créé un modèle de données pour une application iOS. Je suis capable de créer, mettre à jour et supprimer des entités dans le modèle à partir de diverses vues en utilisant l'objet NSEntityDescription. Dites si j'ai un tableau mutable d'objets renvoyés à partir d'une requête d'extraction.Données de base et génération d'entités modèles

Comment puis-je parcourir chaque élément lorsque je n'ai pas de définition d'objet généré à partir du modèle d'entité? Par définition d'objet générée, je veux dire, une définition d'en-tête et de classe de corps de l'entité décrite dans le paquet de modèle de données.

Répondre

0

Toutes les entités CoreData dérivent de NSManagedObject et toutes les données de la base de données sont accessibles via le codage de valeur de clé. Le minimum que vous devez savoir peut être obtenu à partir du modèle. Vous n'avez pas nécessairement besoin des en-têtes.

Par exemple, une entité PersonEntity qui a une relation avec NameEntity avec l'attribut prenom

NSArray *results = [managedObjectContext queryEntityForName:@"PersonEntity" predicateFormat:nil argumentArray:nil]; 

for(NSManagedObject *object in results) 
{ 
NSString *name = [object valueForKeyPath:@"nameobject.firstname"; 
[self doSomething:name]; 
} 

queryEntityForName est ma propre catégorie. Vous pourriez le trouver utile.

@implementation NSManagedObjectContext(VMQueryAdditions) 

-(NSArray *)queryEntityForName:(NSString *)name predicateFormat:(NSString *)pstring argumentArray:(NSArray *)arr 
{ 
    NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:self]; 
    NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease]; 

    [fetch setEntity:entity]; 
    NSPredicate *pred; 

    if(pstring) 
    { 
     if(arr) pred = [NSPredicate predicateWithFormat:pstring argumentArray:arr]; 
     else pred = [NSPredicate predicateWithFormat:pstring]; 
     [fetch setPredicate:pred]; 
    } 

    NSError *error = nil; 

    NSArray *results = [self executeFetchRequest:fetch error:&error]; 

    if (error) { 
     NSLog(@"MOC Fetch - Unresolved error %@, %@", error, [error userInfo]); 
     return [NSArray array]; 
    } 

    return results; 

} 

@end 
+0

Salut Warren. Merci pour votre réponse. NSManagedObject était en effet la classe dont j'avais besoin pour la boucle 'for'. –

+0

Existe-t-il un moyen facile d'analyser les objets gérés? Par exemple, avoir une classe pour représenter une instance d'un objet géré et toutes ses propriétés et relations avec d'autres objets? –

+0

Je ne sais pas trop ce que vous voulez ici. Une instance NSManagedObject est une représentation d'une entrée de table de base de données. Vous pouvez obtenir toutes les informations sur les attributs et les relations pour une entité à partir de NSEntityDescription. –