Вопрос

Я создал класс UITableCellView с именем NoteCell . Заголовок определяет следующее:

#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

В реализации у меня есть следующий код для метода 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];
}

Не удается установить текстовое поле UILabel , и вывод сообщений журнала:

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)

Я также попытался установить текстовое поле UILabel , используя следующий синтаксис:

[self.noteTextLabel setText:newNote.noteText];

Похоже, это не имеет значения.

Любая помощь будет высоко ценится.

Это было полезно?

Решение

Вы где-нибудь настраивали свой noteTextLabel? Для меня это выглядит так, что вы отправляете сообщения с нулевым объектом. Когда ваша ячейка создана, noteTextLabel равен нулю. Если вы никогда не устанавливаете его, вы в основном делаете следующее:

[nil setText: newNote.noteText];

И когда вы позже попытаетесь получить к нему доступ, вы делаете это:

[nil text];

Который вернет ноль.

В вашем методе -initWithFrame: reuseIdentifier: вам нужно явно создать ваш noteTextLabel и добавить его в качестве подпредставления в представление содержимого вашей ячейки:

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

Тогда это должно сработать.

Кроме того, в качестве стилистической заметки я бы сделал свойство для noteTextLabel доступным только для чтения, поскольку вам нужно только получить доступ к нему вне класса, но никогда не устанавливайте его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top