2010-12-10 4 views
0

Ich möchte eine grundlegende Beziehung mit zwei Entitäten in Core Data einrichten, aber die Beziehung wird entweder nicht gespeichert oder funktioniert nicht richtig und ich bin mir nicht sicher warum.Grundlegende Beziehung mit Fetch-Anfragen einrichten

Die beiden Entitäten sind Character und Avatar, es ist eine Eins-zu-Eins-Beziehung. Ein Charakter kann 1 Avatar haben. Technisch gesehen sollte es ein "ein Avatar kann vielen Charakteren gehören", aber ich werde später damit umgehen.

Ich möchte Zeichen hinzufügen und ihnen einen Avatar zuweisen.

Es gibt bereits 10 Avatare in Core Data und 1 Zeichen, die ich beide über das Terminal und SQLite verifiziert habe.

Das Problem ist, ich habe Probleme, "einen Avatar mit einem Namen zu finden und dann die Beziehung zu einem Charakter zu speichern".

Bisher

stelle ich eine Abrufanforderung aufgerufen: "frqAvatarWithName", wo das Prädikat hat die folgende Struktur:

[quote]

name == $ AVATAR_NAME

[/ quote]

Thi s ist so: Ich kann einen Avatar mit einem bestimmten Namen finden; und dann kann ich eine Beziehung mit einem Charakter erstellen.

Problem 1: Er erhält die Abfrage auszuführen, zeigt aber nie an, wie viele Datensätze vorhanden sind.

Ich bekomme einen EXC_BAD_ACCESS Fehler im Debug-Modus und ich habe es zurück auf die Abrufanforderung Template Handling - so, das muss ein Fehler sein oder ich habe es falsch gemacht.

Ausgabe 2: Ich bin mir nicht sicher, ob ich diese "grundlegende" Beziehung überhaupt richtig aufbaue.

[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

Erläuterung: Welche genaue Linie erzeugt den Fehler? – TechZen

Antwort

0

Ich habe auf diesem auf und tat das gesamte Projekt mit dem FMDatabase Projekt und SQLite; Ich war in der Lage, das Problem auf diese Weise zu lösen.

Gewinde geschlossen.