Ich habe eine Core Data-Datenbank von etwa 500 Objekten. Diese Objekte sind "Karten", die vom Benutzer betrachtet und geändert werden. Wenn ein Benutzer die Karte ändert, ändert sich ein Attribut namens 'groupNumber'.Das Laden von Datenobjekten in ein NSArray verursacht einen langsam langsamen Start
Die Reihenfolge dieser Karten in jeder Gruppe ist sehr wichtig und wird vom Benutzer bestimmt. Ich lade die Datenbankobjekte in ein Array. Wenn ein Benutzer eine Änderung vornimmt, speichere ich die Reihenfolge des Arrays mithilfe des Attributs 'title' in einem Verzeichnis.
Mein Problem kommt, wenn die App neu gestartet wird. Ich muss das Gruppenarray in der Reihenfolge laden, in der es gespeichert wurde. Aber wenn ich den PLIST verwende, um eine Abrufanforderung auszuführen, ist es schmerzhaft langsam.
Der langsame Code ist:
// get array from plist sorted by 'title'
NSMutableArray *group1Temp = [plistData objectForKey:@"group1ArrayData"];
for (int i = 0; i < [group1Temp count]; i++) {
// set predicate to 'title' attribute
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", [group1Temp objectAtIndex:i]];
// load filtered database object into temp array
NSArray *temp = [self.vocabDeckArray filteredArrayUsingPredicate:predicate];
[self.group1Array addObjectsFromArray:temp];
}
Wenn diese 500-mal ausgeführt wird, ist es einfach zu langsam ist. Wenn ich ein NSArray der Datenbankobjekte selbst in einem Plist speichern könnte, müsste ich keine Prädikatssuche durchführen, aber es scheint, dass ich das nicht tun kann.
Ich denke meine gesamte Vorgehensweise war falsch. Wie kann ich die Reihenfolge eines Arrays von Datenbankobjekten schneller speichern/laden? Ist das Laden von Datenbankobjekten in ein Array selbst eine schlechte Übung?
Danke für jede Hilfe!
Ich tat genau so, wie Sie gesagt haben, mit der Ausnahme, dass Sie nur ein Array von Objekttiteln anstelle eines Wörterbuchs speichern. Sie haben mir viel Arbeit erspart und die App lädt jetzt in 3 Sekunden. Vielen Dank. – shohaku