Ich weiß, das ist ziemlich lang, aber ich arbeite derzeit an meinem ersten CoreData-Projekt und trotz Lesen jeder Ressource kann ich finden, es ist einfach nicht alle sinken noch in. Bis jetzt habe ich es sparen und beharrlich alles in Ordnung, aber ich kann nicht scheinen, um die Beziehung richtig funktionieren zu lassen. Ich habe eine Tabellenansicht, die "Extensize Categorys" anzeigt, die in eine Tabelle verschoben wird, in der die zugehörigen Exersizes (Eins-zu-Viele) angezeigt werden.CoreData: One-to-Many Beziehung Anzeige Problem
(versucht, ein Bild zu schreiben, aber ich habe noch nicht genug rep Punkte), aber das Datenmodell sieht wie folgt aus
ExersizeCategory < --- >> exersize
von allem, was ich gelesen habe Ich glaube, dass ich ein Prädikat verwenden muss, um die Ergebnisse zu filtern, aber ich bin verwirrt darüber, wie das tatsächlich funktioniert und Wetter oder nicht Ich bin tatsächlich sogar Erstellen und Speichern der Exesize-Categorys und Exersizes Objekte geeignet für die Beziehung zu arbeiten an erster Stelle.
Hier ist, wie ich das Erstellen und Speichern
ExersizeCategory *exersizeCategory = [NSEntityDescription insertNewObjectForEntityForName:@"ExersizeCategory"
inManagedObjectContext:self.managedObjectContext];
exersizeCategory.name = self.textField.text;
[self.managedObjectContext save:nil]; // write to database
(auch seinen Namen in das Textfeld ein Eintrag Einstellung) Und hier ist der Code für die exersizes (ziemlich identisch)
// Create a new instance of the entity
exersize = [NSEntityDescription insertNewObjectForEntityForName:@"Exersize"
inManagedObjectContext:self.managedObjectContext];
exersize.name = self.textField.text;
[self.managedObjectContext save:nil]; // write to database
Obwohl Das scheint beim Erstellen der Objekte zu funktionieren und ich sehe sie auf den Tabellenansichten, die ich noch nicht implementiert habe. Wie und wo passen diese in das Bild?
@interface ExersizeCategory (CoreDataGeneratedAccessors)
- (void) addExersizesObject: (exersize *) Wert ist;
- (void) removeExersizesObject: (Exersize *) Wert;
- (void) addExersizes: (NSSet *) Werte;
- (void) removeExersizes: (NSSet *) Werte;
Ich sollte erwähnen, dass ich die CoreDataTableViewController Klasse bin mit dem Sie die Menge an Code zu reduzieren scheint müssen zu holen schreiben (was ich durch ein Tutorial fand ich bei www.timroadly.com durchlaufen wurde) erstellt von Stanford University. Randbemerkung: Wäre es besser, nicht subclass dies und nur den Standard Weg zu verwenden, wie ich in der .h bemerkte es seine urheberrechtlich geschützten Stanford, so dass ich nicht sicher bin, ob ich es in einer App, die ich veröffentlichen kann, verwenden kann ?
Hier ist, wie ich zur Zeit Abrufen der Exersizes
- (void)setupFetchedResultsController {
// 1 - Decide what Entity you want
NSString *entityName = @"Exersize"; // Put your entity name here
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);
// 2 - Request that Entity
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
// 3 - Filter it if you want
//currently unsure about this!
//request.predicate = [NSPredicate predicateWithFormat:@""];
// 4 - Sort it if you want
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
// 5 - Fetch it
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
[self performFetch];
}
Ich habe ich kenne anzuzeigen wichtige Stücke verpasst diese bei der Umsetzung, aber ich bin nur nicht sicher, welche und wo. Ich war erst seit ein paar Tagen bei den Kerndaten, also war es ziemlich schwer zu lernen!
Vielen Dank an alle, die Licht/Antwort/oder sogar drücken Sie mich in die richtige Richtung!
hallo andrew guten schrei auf die buchung, aber krank halten sie die gleiche nur für den moment der konsistenz halber. Nachdem ich ein paar mehr Dinge versucht habe und ein bisschen mehr gelesen habe, glaube ich, dass ich es richtig abrufen kann, aber wenn ich das exersize-Objekt erstelle, kann ich es nicht in die Beziehung einfügen, da die NSSet-Zählung für exersizes bei 0 bleibt habe versucht [exersizeCategory addExersizesObject: exersize]; aber das scheint nicht zu funktionieren? Ich habe alle Lösungen ausprobiert, die ich finden konnte, aber ich gehe immer noch irgendwo daneben, scheint dir irgendetwas offensichtlich falsch zu sein? danke nochmal –
f.pedition, Jede CD Beziehung hat eine inverse. Wenn also die Beziehung Eins-zu-Viele ist und die Inverse eins zu eins ist, dann kann die Beziehung durch eine einfache Zuweisung aufgebaut werden. Wie in: 'Übung.Ausübungen = Übungen;'. Andrew – adonoho
Andrew, ich kann nicht scheinen, dass das funktioniert, das gleiche Problem wie zuvor. Die exerciseCategory-Objekte werden erstellt und angezeigt, wie sie es sollten, jedoch die Übungen selbst arnt. Durch print-Anweisungen kann ich sehen, dass der Kontext des verwalteten Objekts weitergegeben wird und etwas erstellt wird, aber das NSSet bleibt leer und auch die Tabellenansicht Ich nehme an, dass es nichts bekommen hat, weil es zugehörige Einträge abgerufen und nichts hinzugefügt hat holen. irgendwelche Ideen, was könnte passieren? Ich könnte meinen Beitrag aktualisieren, um mehr Code zu zeigen, wenn es der Situation hilft? Prost Mann! –