3

我创建了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];

这似乎没有什么不同。

任何帮助将非常感激。

4

1 回答 1

10

你有没有在任何地方设置你的noteTextLabel?在我看来,您正在向 nil 对象发送消息。创建单元格时,noteTextLabel 为 nil。如果您从未设置它,那么您基本上是在执行以下操作:

[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];

那么这应该工作。

此外,作为文体说明,我会将propertyfor noteTextLabel 设为只读,因为您只想从课堂外访问它,而不要设置它。

于 2008-11-03T18:27:42.407 回答