Ich habe in den letzten Tagen versucht, ein Mysterium zu lösen, warum mein NSFetchedResultsController mit einer Stapelgröße von 20 immer alle meine Objekte sofort in den Speicher laden würde Wenn der Abruf beendet wurde, dauert die Anforderung ~ 20 Sekunden.Dynamische UITableView-Höhe mit Core Data-Objekten
Es stellt sich heraus, dass es war, weil in meinem heightForRowAtIndexPath die Höhe auf der Länge einer NSString-Eigenschaft jedes abgerufenen Objekts basiert, und beim Neuladen der Tabelle, wenn die Tabelle 2000 Zeilen hat, dann wird die Höhe berechnet für jede Zeile am Anfang, und da ich auf eine Texteigenschaft des Objekts zugreife, würde es in 2000 Objekten (in Chargen mit 20 Größen) gleich zu Beginn Fehler verursachen, was es für immer dauern würde. (Ich wusste nicht, Zeilenhöhe wurden alle am Anfang berechnet). Die Frage ist, ob ich einen Abrufergebnis-Controller mit einer Stapelgröße von 20 habe, aber meine Zeilenhöhen basieren auf einer Texteigenschaft des Objekts, die, wenn ich versuche, darauf zuzugreifen, das Objekt nicht verursachen würde ein Fehler mehr, aber tatsächlich in den Speicher geladen, was wäre ein Workaround zur Berechnung der Höhe?
Was sind meine Optionen?
Was passiert, wenn Sie überprüfen, ob das Objekt ein Fehler ist, wenn es ist, geben Sie eine willkürliche Größe zurück, sonst erhalten Sie die Zeichenfolge und berechnen? Wird die Methode erneut aufgerufen, wenn die Zelle angezeigt wird? Ich rate nur hier. Das oder das Implementieren eines verzögerten Ladens (dh neue Zeilen werden beim Blättern hinzugefügt) scheinen die einzigen Optionen zu sein. – jrturton
Kein heightForRow wird nur zu Beginn eines Reloads aufgerufen und nicht jedes Mal aufgerufen, wenn eine Zelle erscheint (wie bei cellForRow). Das habe ich auch gedacht, aber ich glaube nicht, dass es funktionieren würde. – Snowman
Dachte, es klang zu einfach. – jrturton