我有一个Post
对象我正在尝试初始化PostTableViewCell
。以下是我在视图控制器中所做的事情 -
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"Post";
Post *post = [self.posts objectAtIndex:indexPath.row];
PostTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier];
cell.post = post;
return cell;
}
在cellForRow
中,对象实例化了所有正确的数据。为什么Post
PostTableViewCell.h
属性为awakeFromNib
而PostTableViewCell.h
执行时为何?
在@property (strong, nonatomic) Post *post;
我有 -
Stream.Writeline("part of the command")
Stream.Readline();
Stream.Writeline("second part of command")
Stream.Readline();
Stream.Writeline("last part of command")
Stream.Readline();
答案 0 :(得分:1)
调用post
时nil
为awakeFromNib
的原因是因为该属性尚未设置。 UITableView
处理表视图单元格的实例化,这在您调用dequeueReusableCellWithIdentifier:
之前的某个时间发生。在单元格实例化之后,您将在单元格上设置post
属性。
您想要做的是覆盖-(void)setPost:(Post *)post
中的方法PostTableViewCell.m
。这是在设置属性时自动调用的属性的setter。
- (void)setPost:(Post *)post {
if (post != _post) {
_post = post;
[self updateCellAppearance]; // Your own method that updates the cell's data and appearance as needed
}
}
答案 1 :(得分:0)
awakeFromNib
,
从接收器加载后准备接收器以进行维修 Interface Builder存档或nib文件。
所以,对于cell
,它首先被调用。并且在此之后调用cellForRowAtIndexPath
,并且每当您滚动tableView
时,它都会释放单元格以便重复使用,但此方法会在awakeFromNib
之后调用。因此,您无法在post
中获取nil
对象awakeFromNib
。