Ho avuto l'impressione che viewDidLoad venga chiamato DOPO che preparaForSegue finisce. Questo è anche il modo in cui Hegarty insegna alla sua classe di Stanford (fino a febbraio 2013).viewDidLoad chiamato prima di prepareForSegue termina
Tuttavia, per la prima volta oggi, ho notato che viewDidLoad è stato chiamato PRIMA che prepareForSegue era finito. Pertanto, le proprietà che stavo impostando in prepareForSegue non erano disponibili per destinationViewController all'interno del metodo viewDidLoad destinazioni.
Questo sembra contrario al comportamento previsto.
UPDATE
ho appena capito cosa stava succedendo. Nel mio destinationViewController ho avuto un setter personalizzato che ricaricare il tableView ogni volta che il "modello" è stato aggiornato:
DestinationViewController
- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
{
_managedObjectsArray = [managedObjectsArray copy];
[self.tableView reloadData];
}
Si scopre, dal momento che la destinationViewController è una sottoclasse di UITableViewController ... chiamare 'self.tableView' forza la vista a caricare. Secondo la documentazione di Apple, chiamare la proprietà view di un controller di visualizzazione può forzare il caricamento della vista. La vista di un UITableViewController è il tableView.
Pertanto, nel prepareForSegue la seguente riga stava forzando la vista del destinationViewController a carico:
vc.managedObjectsArray = <custom method that returns an array>;
per risolvere il problema, ho cambiato il setter personalizzato del modello del destinationViewController a:
- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
{
_managedObjectsArray = [managedObjectsArray copy];
if ([self isViewLoaded]) {
[self.tableView reloadData];
}
}
Questo ricaricherà solo il TableView se il TableView è sullo schermo. Quindi non forzare la vista a caricare durante prepareForSegue.
Se qualcuno si oppone a questo processo, si prega di condividere i vostri pensieri. Altrimenti, spero che ciò impedisca una lunga notte insonne per qualcuno.
Come sai che è stato chiamato viewDidLoad? Puoi condividere qualche codice? – Spectravideo328
Sospetto che 'prepareForSegue' sia in effetti la funzione che (direttamente o indirettamente) chiama' viewDidLoad'. –