2010-12-10 27 views
0

Je souhaite établir une relation de base avec deux entités dans les données de base, mais la relation n'est pas en cours d'enregistrement ou ne fonctionne pas correctement et je ne sais pas pourquoi.Configuration de la relation de base avec les requêtes d'extraction

Les deux entités sont Character et Avatar, c'est une relation un-à-un. Un personnage peut avoir 1 avatar. Techniquement, ça devrait être "un avatar peut être possédé par plusieurs personnages", mais je traiterai de ça plus tard.

Je souhaite ajouter des caractères et leur affecter un avatar.

Il y a déjà 10 avatars dans Core Data et 1 caractère, que j'ai vérifiés via le Terminal et SQLite. Le problème est, je suis troublant "trouver un avatar par un nom et en sauvant alors la relation à un caractère".

Jusqu'à présent,

Je crée une demande d'extraction appelé: "frqAvatarWithName" où le prédicats a la structure suivante:

[quote]

nom == $ AVATAR_NAME

[/ quote]

Thi s est ainsi: je peux trouver un avatar avec un certain nom; et puis je peux créer une relation avec un personnage.

Problème 1: Il exécute la requête, mais il n'indique jamais le nombre d'enregistrements.

Je reçois une erreur EXC_BAD_ACCESS en mode débogage et je l'ai retracée à la gestion du modèle de demande de récupération - donc, cela doit être en erreur ou je l'ai fait mal.

Problème 2: Je ne suis pas sûr si je mets en place cette relation "de base" correctement.

[code]

// This code is meant to find an avatar with a certain name and then save the relationship 
// between a character and said avatar. 
// This is my app delegate file for the moment 
// All the files are present, and I have deleted/recreated the app various times 
-(void)characterMaker 
{ 
    NSLog(@"Inside characterMaker..."); 
    NSError *error = nil; 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSManagedObjectModel *model = [self managedObjectModel]; 

    // Find an avatar with a specific name 
    NSString *nameToFind = @"avt_player_1"; 


    // Use a Fetch request template 
    NSDictionary *subs = [NSDictionary dictionaryWithObjectsAndKeys:nameToFind, @"AVATAR_NAME", nil]; 
    NSFetchRequest *fetchRequest = [model fetchRequestFromTemplateWithName:@"frqAvatarWithName" 
               substitutionVariables:subs]; 


    // Set the entity to use 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Avatar" 
               inManagedObjectContext:context]; 


    [fetchRequest setEntity:entity]; 

    // Execute the query (it never even reaches this point) 
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 

    if (fetchedObjects == nil) { 
     // Handle the error 
     NSLog(@"Error -- %@", [error localizedDescription]); 
     abort(); 
    } 

    NSLog(@"Found %@ records", [fetchedObjects count]); 

// Print out avatar names 
    for (Avatar *a in fetchedObjects) 
    { 
     NSLog(@"Name = %@", [a valueForKey:@"name"]); 
    } 

    // This is where I would use `a` and store it in a character entity, and thus create the relationship 

[/ code]

+0

Clarification: Quelle ligne exacte produit l'erreur? – TechZen

Répondre

0

J'ai renoncé à cela et fait l'ensemble du projet avec le projet FMDatabase et SQLite; J'ai été capable de résoudre le problème de cette façon.

Fil fermé.