NumberOfRowsInSection调用两次 - 第二次传递属性“unset”

时间:2013-05-17 13:14:01

标签: ios objective-c

我正在努力理解这一点,并希望有人能帮助我解决这个问题。

我的ViewController中有一个名为回复的属性。在用户单击表中的行之后,由另一个ViewController加载它,并将XML节点传递给新ViewController上的属性。

我有这段代码:

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (replies == nil)
    {
        replies = [[NSArray alloc] init];
    }
    if(replies.count == 0)
    {
        replies = [node elementsForName:@"question"];
    }

    return replies.count;
}

回复是ViewController上的属性。 NumberOfRowsInSection在加载过程中被调用两次。在第一遍,我可以看到属性填充。在第二个它是空的,并且对replies.count的调用返回“发送到解除分配的实例的消息”错误。

我对此感到困惑 - 因为属性是在第一次传球时设定的,所以当第二次传球发生时我的价值发生了什么变化?这让我疯了......

1 个答案:

答案 0 :(得分:0)

确保您的财产保留对回复的强烈参考:

@property (nonatomic, strong) NSArray *replies;

和参考回复如下:

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  if (self.replies == nil)
  {
      self.replies = [[NSArray alloc] init];
  }
  if(replies.count == 0)
  {
      self.replies = [node elementsForName:@"question"];
  }
  return self.replies.count;
}