使用自定义对象

时间:2016-09-12 18:15:34

标签: ios objective-c uitableview

我有一个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属性为awakeFromNibPostTableViewCell.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();

2 个答案:

答案 0 :(得分:1)

调用postnilawakeFromNib的原因是因为该属性尚未设置。 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)

参考apple documentation

awakeFromNib

  

从接收器加载后准备接收器以进行维修   Interface Builder存档或nib文件。

所以,对于cell,它首先被调用。并且在此之后调用cellForRowAtIndexPath,并且每当您滚动tableView时,它都会释放单元格以便重复使用,但此方法会在awakeFromNib之后调用。因此,您无法在post中获取nil对象awakeFromNib