Impossibile impostare il campo di testo su UILabel
-
06-07-2019 - |
Domanda
Ho creato la classe UITableCellView
chiamata NoteCell
. L'intestazione definisce quanto segue:
#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
Nell'implementazione ho il seguente codice per il metodo 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];
}
Questo non riesce a impostare il campo di testo di UILabel
e l'output dei messaggi di log è:
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)
Ho anche provato a impostare il campo di testo di UILabel
usando la sintassi seguente:
[self.noteTextLabel setText:newNote.noteText];
Questo non sembra fare la differenza.
Qualsiasi aiuto sarebbe molto apprezzato.
Soluzione
Hai impostato noteTextLabel ovunque? Ciò che mi sembra è che stai messaggiando un oggetto nullo. Quando viene creata la cella, noteTextLabel è zero. Se non lo hai mai impostato, sostanzialmente stai facendo quanto segue:
[nil setText: newNote.noteText];
E quando in seguito provi ad accedervi, stai facendo questo:
[nil text];
Che restituirà zero.
Nel tuo metodo -initWithFrame: reuseIdentifier:
, devi creare esplicitamente il tuo noteTextLabel e aggiungerlo come sottoview alla visualizzazione del contenuto della tua cella:
self.noteTextLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0, 0, 200, 20)] autorelease];
[self.contentView addSubview: self.noteTextLabel];
Quindi dovrebbe funzionare.
Inoltre, come nota stilistica, renderei la proprietà
per noteTextLabel in sola lettura, poiché vorrai accedervi solo al di fuori della classe, non impostarla mai.