Domanda

Ho un problemetic UITableViewController non riesce a ridisegnare una cella aggiornata dopo la vista del bambino viene rimosso.

Ecco cosa sta succedendo. Dopo la modifica dei dati in una vista del bambino, vista primaria ricarica controller di matrice di dati di origine e corre [tableView reloadData] attraverso un PostNotification. Dopo questo trigger, io uso popViewControllerAnimated per tornare al genitore UITableViewController (questo si apre la vista del bambino dallo stack, e rivela l'un livello di controllo in su).

Tuttavia, i miei dati aggiornati non appare nel controller della vista genitore! Secondo il debugger, l'etichetta del cellulare è stato aggiornato, ma l'etichetta visibile non cambia. Tuttavia, se ho scorrere-flick tavolo, momentaneamente spostando la cella aggiornata fuori dalla vista, quando riappare l'etichetta sia aggiornata!

Ho anche provare chiamando [tableView reloadData] con viewWillAppear , ma il problema ancora persiste.

Ecco alcune informazioni aggiuntive che possono essere utili. Ho un 3 vista strutturato in questo modo:

1/  SettingsViewController : UITableViewController
2/  -- UserView : UITableViewController
3/  ---- UserDetailsView : UIViewController <UIActionSheetDelegate>

io chiamo UserDetailsView da UserView interna come segue:

 UserDetailsView *userDetailsView = [[UserDetailsView alloc] init];
 [self.navigationController pushViewController:userDetailsView animated:YES];

Se dovessi tornare al più in alto controllore (SettingsViewController) e quindi caricare il controller problematico (UserView), tutto è disegnato in modo corretto. E 'solo quando di ritorno da una vista del bambino che si verifica questo problema.

Grazie in anticipo per i vostri suggerimenti.

È stato utile?

Soluzione

Infine lavorato questo fuori dopo circa un'ora di coppia di codifica.

Dopo un po 'abbiamo notato che tableView era sempre nullo ogni volta che ha inviato il messaggio reloadData. Come si può sapere in Objective C, oggetti nulli accettano qualsiasi messaggio senza denuncia.

Si scopre che "qualcuno" (ehm, scusate sono stato io) aveva definito questa riga nel file di intestazione.

 UITableView *tableView;

Ora voi intelligenti cookie là fuori sapranno che a causa estendiamo UITaleViewController, non abbiamo bisogno di fare un puntatore a tableView noi stessi . In effetti avevo sostituito il membro tableView ereditato con un oggetto nullo.

Misteri risolto. Speriamo che questo aiuta qualcun altro là fuori troppo! : D

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top