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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top