2010-03-10 2 views
3

J'ai écrit une application tabbar où sur le premier onglet j'ai une vue de table avec un contrôleur de navigation.popToRootViewControllerAnimated et reloadData

Le tableviewController est poussé à chaque fois que je sélectionne une ligne. Ceci est un répertoire distant sur un serveur, par ex./dir1

Quand à partir du deuxième onglet je sélectionne un répertoire racine differnt par exemple/dir2 puis quand je vais au premier onglet je veux enlever tous les contrôleurs de la pile et recharger la vue table avec le contenu de/dir2. Donc, c'est ce que je fais

- (void)viewWillAppear:(BOOL)animated 
{ 
    [[self navigationController] popToRootViewControllerAnimated:NO];  
    [self initFirstLevel]; // This loads the data.  
    [self.tableView reloadData]; 
} 

Ce qui se passe est le tableviewControllers se poped de la pile et retourne à la RootViewController mais le contenu de/dir2 ne soit pas chargé dans l'affichage du tableau.

Répondre

4

Lorsque vous appelez la

[[self navigationController] popToRootViewControllerAnimated:NO]; 

le NavigationController va essayer de pop tous les contrôleurs de vue et montrer le contrôleur de vue de dessus, les codes suivants ne seront pas appelés.

Vous devez envisager de gérer la méthode viewWillAppear du module topViewController pour toute modification et tout rechargement de données.

Voici un exemple de ce que vous pouvez faire avec viewWillAppear sur l'exemple d'application iPhoneCoreDataRecipes Cette exemple d'application vous donnera un aperçu des cycles de vie du contrôleur de vue, etc ...

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    [photoButton setImage:recipe.thumbnailImage forState:UIControlStateNormal]; 
    self.navigationItem.title = recipe.name; 
    nameTextField.text = recipe.name;  
    overviewTextField.text = recipe.overview;  
    prepTimeTextField.text = recipe.prepTime;  
    [self updatePhotoButton]; 

    /* 
    Create a mutable array that contains the recipe's ingredients ordered by displayOrder. 
    The table view uses this array to display the ingredients. 
    Core Data relationships are represented by sets, so have no inherent order. Order is "imposed" using the displayOrder attribute, but it would be inefficient to create and sort a new array each time the ingredients section had to be laid out or updated. 
    */ 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"displayOrder" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1]; 

    NSMutableArray *sortedIngredients = [[NSMutableArray alloc] initWithArray:[recipe.ingredients allObjects]]; 
    [sortedIngredients sortUsingDescriptors:sortDescriptors]; 
    self.ingredients = sortedIngredients; 

    [sortDescriptor release]; 
    [sortDescriptors release]; 
    [sortedIngredients release]; 

    // Update recipe type and ingredients on return. 
    [self.tableView reloadData]; 
} 
+0

Pouvez-vous être plus précis abount manutention la méthode viewWillAppear? J'ai couru le code après le popToRootViewControllerAnimated et il semble fonctionner. Mais je ne sais pas sur quel contrôleur il est chargé. – Teo

+0

J'ai modifié la réponse –

Questions connexes