質問

NoteCell という UITableCellView クラスを作成しました。ヘッダーは以下を定義します:

#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をどこかに設定しましたか?これが私に見えるのは、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];

これで動作するはずです。

また、スタイル上の注意として、noteTextLabelの property を読み取り専用にします。クラスの外部からのみアクセスしたいので、決して設定しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top