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]
Erläuterung: Welche genaue Linie erzeugt den Fehler? – TechZen