2008-11-03 11 views
3

J'ai créé la classe UITableCellView appelée NoteCell. L'en-tête définit les éléments suivants:Impossible de définir le champ de texte sur UILabel

#import <UIKit/UIKit.h> 
#import "Note.h" 

@interface NoteCell : UITableViewCell { 
    Note *note; 
    UILabel *noteTextLabel; 
} 

@property (nonatomic, retain) UILabel *noteTextLabel; 

- (Note *)note; 
- (void)setNote:(Note *)newNote; 

@end 

Dans la mise en œuvre, j'ai le code suivant pour la méthode setNote::

- (void)setNote:(Note *)newNote { 
    note = newNote; 
    NSLog(@"Text Value of Note = %@", newNote.noteText); 
    self.noteTextLabel.text = newNote.noteText; 
    NSLog(@"Text Value of Note Text Label = %@", self.noteTextLabel.text); 
    [self setNeedsDisplay]; 
} 

Ce ne parvient pas à définir le champ de texte de la UILabel et la sortie des messages du journal est:

2008-11-03 18:09:05.611 VisualNotes[5959:20b] Text Value of Note = Test Note 1 
2008-11-03 18:09:05.619 VisualNotes[5959:20b] Text Value of Note Text Label = (null) 

J'ai aussi essayé de définir le champ de UILabel texte en utilisant la syntaxe suivante:

[self.noteTextLabel setText:newNote.noteText]; 

Cela ne semble pas faire de différence.

Toute aide serait grandement appréciée.

Répondre

10

Avez-vous configuré votre noteTextLabel n'importe où? Ce que cela ressemble à moi, c'est que vous envoyez un message à un objet nul. Lorsque vous créez une cellule, noteTextLabel est nul. Si vous ne le configurer, vous faites essentiellement les suivantes:

[nil setText: newNote.noteText]; 

Et quand vous essayez plus tard d'y accéder, vous faites ceci:

[nil text]; 

qui retournera nul.

Dans votre méthode -initWithFrame:reuseIdentifier:, vous devez créer explicitement votre noteTextLabel, et l'ajouter en tant que sous-vue pour afficher le contenu de votre cellulaire:

self.noteTextLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0, 0, 200, 20)] autorelease]; 
[self.contentView addSubview: self.noteTextLabel]; 

cela devrait fonctionner.

Aussi, comme une note stylistique, je voudrais rendre le property pour noteTextLabel en lecture seule, puisque vous ne voulez l'accéder à l'extérieur de la classe, ne jamais le définir.

+1

Merci pour la réponse rapide, il a résolu le problème tout de suite. Je n'arrive pas à croire que je n'ai pas repéré ça, je l'ai regardé pendant une heure et commençais à devenir aveugle au code. – lucasweb