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

これはnilを返します。

-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 に答える