2009-12-12 5 views
3

Lorsque j'essaie d'afficher un contrôleur de vue, il ne met pas à jour les informations de la vue précédente. Exemple: J'ai une cellule qui affiche du texte dans une étiquette dans View1. Lorsque vous cliquez sur la cellule, elle passe à View2 (par exemple) Lorsque je choisis une option dans View2, popViewControllerAnimated est utilisé pour revenir à View1, mais je veux que l'étiquette soit maintenant mise à jour avec la nouvelle option dans View1. Mon dilemme est que lorsque j'ouvre View2, l'étiquette dans View1 ne se met pas à jour. Des idées? J'ai essayé d'ajouter un [view1 reloadData]; avant que la vue apparaisse, mais pas de chance.popViewControllerAnimated ne met pas à jour les informations iPhone SDK

//VIEW1 the cell that displays the label. 
    ringLabel = [[UILabel alloc] initWithFrame: CGRectMake(25, 12.7f, 250, 20)]; 
    ringLabel.adjustsFontSizeToFitWidth = YES; 
    ringLabel.textColor = [UIColor blackColor]; 
    ringLabel.font = [UIFont systemFontOfSize:17.0]; 
    ringLabel.backgroundColor = [UIColor clearColor]; 
    ringLabel.textAlignment = UITextAlignmentLeft; 
    ringLabel.tag = 0; 
    ringLabel.text = [plistDict objectForKey:@"MYOPTION"]; 
    [ringLabel setEnabled:YES]; 
    [cell addSubview: ringLabel]; 
    [ringLabel release]; 


//VIEW2 when cell clicked 
    CustomProfileViewController *cpvc = [CustomProfileViewController alloc]; 
    cpvc.ringtone = [ringList objectAtIndex:indexPath.row]; 
    [cpvc.tblCustomTable reloadData]; 
    [self.navigationController popViewControllerAnimated:YES]; 

Répondre

6

Vous souhaitez remplacer -viewWillAppear: le premier contrôleur de vue et mettre à jour l'étiquette là. (Assurez-vous d'appeler également le super).

Exemple:

- (void)viewWillAppear:(BOOL)animated { 
    // This method is called whenever the view is going to appear onscreen. 
    // (this includes the first time it appears.) 
    ringLabel.text = [plistDict objectForKey:@"MYOPTION"]; 
    [super viewWillAppear:animated]; 
} 
+0

Essayé, et ça ne marche pas. J'ai même essayé de recharger des données dans WillLoad/Didload, et rien! l'étiquette ne sera mise à jour que si je reviens au contrôleur de la vue racine puis au contrôleur view1. Je n'ai aucune idée pourquoi ce n'est pas la mise à jour! – WrightsCS

+1

Vérifiez que viewWillAppear est appelé (il est ou quelque chose ne va pas) ET vérifiez que plistDict a la valeur attendue pour la clé MYOPTION. Ceux-ci peuvent tous deux être gérés par un NSLog qui affiche la valeur du dictionnaire appelé à partir de viewWillAppear. – gerry3

+1

En fait, j'ai dû ajouter viewDidAppear et cela a bien fonctionné. – WrightsCS

0

Quel est votre objet plistDict? Comment l'initialisez-vous? Etes-vous sûr qu'il contient la bonne valeur pour votre @ "MYOPTION" clé après la deuxième vue se cache? Comme je peux le voir, plistDict est un objet à l'intérieur de votre premier viewController. Aussi, je ne vois pas de sens dans les 4 dernières lignes de votre code. Ils provoquent pas de rechargement des données, mais la fuite de mémoire.

+0

C'est une chaîne. Les données sont initialisées juste parce que j'ai utilisé la même méthode dans d'autres endroits. Le problème est le popViewController, je ne suis pas sûr qu'il permet à la précédente VC pour mettre à jour pour une raison quelconque. Dans les 4 dernières lignes, Im essayant de mettre la sonnerie NSString de CPVC à mes nouvelles données, cela a fonctionné dans d'autres domaines, mais pas quand la vue est éclatée! Y at-il un autre moyen de revenir au contrôleur précédent sans "pushViewController" – WrightsCS

+0

plistDict est une chaîne ????? et vous essayez de trouver une valeur pour la clé ??? et je ne peux pas imaginer quand vos 4 dernières lignes peuvent fonctionner. ils sont inutiles. Comme beaucoup de gens ci-dessous, je vous propose de vérifier votre plistDict dans la méthode viewWillAppear. il sera calé après que votre contrôleur de vue est sauté – Morion

0

Assurez-vous que vous ne perdez rien d'important dans votre méthode dealloc. ça m'a gâché pendant des semaines. Je libérais une variable qui pointait vers celle de mon délégué.

Questions connexes