Ho cercato di risolvere un mistero negli ultimi giorni sul motivo per cui il mio NSFetchedResultsController con una dimensione di batch di 20 avrebbe sempre eseguito l'errore (cioè, carica in memoria) tutti i miei oggetti immediatamente quando il recupero è terminato, causando la richiesta di prendere ~ 20 secondi.Altezza UITableView dinamica con oggetti Data Core
Si scopre che era perché nel mio heightForRowAtIndexPath, l'altezza era basata sulla lunghezza di una proprietà NSString di ogni oggetto recuperato, e così dopo aver ricaricato la tabella, se la tabella ha 2000 righe, l'altezza viene calcolata per ogni riga all'inizio, e dal momento che accedo a una proprietà testuale dell'oggetto, si verificherà un errore in 2000 oggetti (in 20 lotti di dimensioni) proprio all'inizio, causandone l'uso per sempre. (Non sapevo che l'altezza delle righe fosse calcolata tutto all'inizio).
Quindi la domanda è, se ho un controller di risultati di recupero con una dimensione di batch di 20, ma le mie altezze di riga si basano su una proprietà di testo dell'oggetto, che se provo ad accedere causerebbe l'oggetto non essere un guasto più ma effettivamente caricato in memoria, quale sarebbe una soluzione alternativa per il calcolo dell'altezza?
Quali sono le mie opzioni?
Cosa succede se si verifica se l'oggetto è un errore, se lo è, restituisce una dimensione arbitraria, altrimenti ottenere la stringa e calcolare? Il metodo viene richiamato di nuovo quando la cella entra in visualizzazione? Sto solo indovinando qui. Quella o l'implementazione di un carico pigro (le nuove righe vengono aggiunte mentre scorri) sembrano essere le tue uniche opzioni. – jrturton
No heightForRow viene chiamato solo all'inizio di una ricarica e non viene chiamato ogni volta che appare una cella (come farebbe cellForRow). Questo è quello che stavo pensando anche io, ma non penso che funzionerebbe .. – Snowman
Pensavo che suonasse troppo facile. – jrturton