9
votes

Uilabel ne mettant pas à jour

Désolé de la question fondamentale, mais cela me bugs depuis un moment maintenant.

Je crée une vue de détails d'une manière utable et essayez de définir de manière dynamique ses étiquettes, mais elles ne mettent pas la mise à jour: p> xxx pré>

Les connexions du constructeur d'interface sont définies. L'onglet Connexions pour le propriétaire de fichier affiche P>

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

 myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];

 [self.navigationController pushViewController:tmpVC animated:YES];

 [tmpVC.myLabel setText:tmpObj.myTitle];   // The debugger shows the text: myTitle = "myText"
 NSLog(@"%@", tmpVC.myLabel);              // NSLog SHOWS NULL

 [tmpObj release];
}
  • J'ai aussi une ibaction connectée. Cette méthode est correctement appelée quand je Cliquez sur le bouton connecté. LI>
  • J'ai quelques indicateurs à mon Nslog-déclaration, que ce soit pas mieux utiliser tmpvc.mylabel.text, Mais essayer de retourner aussi NULL. LI>
  • mylabel est déclaré comme iboutlet Uilabel * mylabel dans l'interface. La propriété est définie comme nonatomique, Conserver. Li> ul>

    Il y a la lumière: p>

    Après avoir joué avec elle pendant un peu plus, j'ai déplacé la déclaration PushViewController au-dessus des mises à jour de l'étiquette. Cela résolvait les mises à jour d'étiquettes. P>

    Code de travail ressemble à ceci: p> xxx pré>

    mais je ne comprends pas pourquoi je dois d'abord pousser mon opinion ?? ? p> p>


1 commentaires

Le libérez-vous n'importe où dans votre code autre que le DEALLOC?


5 Réponses :


1
votes

Si TMPVC.MYLABEL est NULL, qui indique probablement que vous n'avez pas apporté la connexion nécessaire au constructeur d'interface à partir de l'Uilabel à votre variable d'instance MyLabel.


1 commentaires

La connexion existe: les points de vente du propriétaire de fichier indiquent 'My Label' - 'Label (Mylabel)'.



0
votes

n'est-ce pas parce que votre nslog code> tente d'imprimer l'objet d'étiquette réel. Si vous n'avez pas

NSLog(@"%@", tmpVC.myLabel.text);


5 commentaires

hmm, je pense que tu es juste là, mais (a) quand j'essaie d'ajouter ".text", je reçois une erreur de compilateur "Membel" MyLabel "Pas dans la structure ou l'union"
(B) de la déclaration SecondExt Ne produit aucune mises à jour en vue.
peut-être (a) conduit à la vue non bien connectée à la pointe ou au contrôleur, mais ne peut pas voir où la pause pourrait rester assis ...


ajouté plus à ma réponse, voir ci-dessus


Salut Codezy, Désolé, c'était une faute de frappe (corrigée ci-dessus). IB Woud ne me laissez pas connecter la classe de correspondance 2 W / OUT. La définition est Uilabel ...


Libérez-vous cette étiquette partout autre que celle de DealLoc, car cela pourrait le faire.


Pas un servalal, mais jetez un coup d'œil à mes mises à jour dans la question ci-dessus (sous la lumière). Il semble que la séquence de code avait besoin de changer



1
votes

Avez-vous @Synthesize Votre propriété Mylabel dans myViewController.m ? Vous devriez être capable de faire quelque chose comme:

tmpvc.mylabel.text = tmpobj.mytitle;


1 commentaires

C'était dans mon cas. Oublié "@synthesize". Merci!



0
votes

Pas sûr, mais je pense que c'est ce qui se passe:

Lorsque la vue est enfoncée, le contrôleur charge la vue de la nib et raccroche les actions et les points de vente. Avant cela, les points de vente ne sont pas connectés, donc tmpvc.mylabel est nul.

Si vous voulez être sûr, vous pouvez mettre un point d'arrêt dans ViewDidload de TMPVC pour voir lorsque la vue est chargée.


0 commentaires

13
votes

C'est parce que la vue du contrôleur est créée paresseusement uniquement lorsqu'elle est accessible. Appuyer sur le contrôleur accède à la vue.

Alternativement, si vous ajoutez une ligne pour accéder à la propriété Afficher, elle fonctionnera aussi: P>

  myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];
  tmpVC.view;   // Force view creation
  [tmpVC.myLabel setText:tmpObj.myTitle];   // The debugger shows the text: myTitle = "myText"
  NSLog(@"%@", tmpVC.myLabel);              // NSLog will display "myText"
  [self.navigationController pushViewController:tmpVC animated:YES];


3 commentaires

Merci @ hwee-boon-yar BTW, TMPVC.View a renvoyé un avertissement, [TMPVC View] fonctionne à 100% pour moi;)


Je viens de trouver cela avec le même problème - ce n'est pas un "merci", juste pour signaler l'autre option que j'ai utilisée consistait à stocker le texte de l'objet Contrôleur d'affichage et à la définir dans la vue ViewDidLoad


merci de me permettre une nouvelle chose d'apprendre .Force Voir la création. + 1 de mon côté