Ich versuche, meine Coredata-Modell für diese Situation zu entwerfen:NSFetchedResultsController Komplex Abrufanforderung und Modell
Wir haben Song
Objekt, das mit einigen List
-Beziehung haben.
Jedes List
haben name
Eigenschaft und auch zu-viele-Beziehung haben mit Song
Diese many-to-many-Beziehung ist erforderlich, da ein Song
kann in jedem List
zugleich präsentiert werden.
Ich brauche irgendwie Liste der Song
s durch diesen Header (Name des List
) mit NSFetchedResultsController
gruppiert zu erhalten (da Benutzer 10.000 Songs haben kann, und ich will es nicht in NSArray
irgendwo speichern).
Wenn ich versuche, sectionNameKeyPath:
mit einem Wert, z. @"List.name"
Ich habe einen Fehler "to-many Beziehung ist nicht erlaubt" und das macht natürlich Sinn.
Also muss ich helfen, wie mein Modell zu entwerfen zu können, Song
s haben und einige List
s wie „Geschichte“/usw. und in der Lage sein zu holen alle Daten mit NSFetchedResultsController
„Next Spielen“.
Jede Hilfe wird geschätzt. Wenn meine Erklärung nicht klar war, bitte fragen Sie nach weiteren Informationen.
Teil meiner Code:
- (void)initFetch {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Song"];
[fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES]]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY [email protected] != 0"];
fetchRequest.fetchBatchSize = 20;
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.context sectionNameKeyPath:@"name" cacheName:nil];
[self.fetchedResultsController setDelegate:self];
NSError *error = nil;
[self.fetchedResultsController performFetch:&error];
if (error) {
NSLog(@"Unable to perform fetch.");
NSLog(@"%@, %@", error, error.localizedDescription);
}
}
danke für den Kommentar, aber ich sollte nicht mit Ihrer Aussage über FRC würde nicht helfen, Speichermenge zu reduzieren. Zum Beispiel kann meine App jetzt eine Playlist mit mehr als 20000 Songs enthalten. Wenn ich alle diese Datensätze abrufe, stürzt die App ab. Ich mag keine Idee, dieses ganze Zeug manuell zu managen, und ich habe keine Ahnung, wie man das macht :) Auch [@ Brads Antwort] (http://stackoverflow.com/a/1263845/1263701) stellen Sie fest, dass FRC in meiner Situation sehr nützlich ist. – zakhej
Brads Antwort ist völlig richtig, es sagt auch das gleiche wie ich über die Abruf Batch-Größe, die der Schlüssel zur Speicherverwaltung ist. Er behandelt jedoch nicht die Beziehungen, und das ist es, was ich beziehe und womit du ein Problem hast. Ich würde empfehlen, Ihr Datenmodell zu ändern ... – Wain
Ich sehe nicht, warum das Brechen des n: m in Zwischenobjekte helfen kann. Es ist kein Problem der Implementierung der n: m-Beziehung. Ich würde jedoch empfehlen, auch mehrere FRC zu verwenden. –