سؤال

ولقد خلق الطبقة 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 الخاص بك، وإضافة على أنها subview لعرض محتوى الخليوي في:

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

وبعد هذا يجب أن تعمل.

وأيضا، كملاحظة الأسلوبية، وأود أن جعل property لnoteTextLabel للقراءة فقط، منذ كنت فقط تريد الذهاب الى الوصول إليه من خارج الصف، لم تطأ عليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top