UILabel没有更新

9 iphone objective-c

对不起基本问题,但现在这让我有点困扰.

我从UITable创建一个详细信息视图,并尝试动态设置其标签,但他们没有更新:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

  myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];

  [tmpVC.myLabel setText:tmpObj.myTitle];   // The debugger shows the text: myTitle = "myText"
  NSLog(@"%@", tmpVC.myLabel);              // NSLog SHOWS NULL

  [self.navigationController pushViewController:tmpVC animated:YES];
  [tmpObj release];
}
Run Code Online (Sandbox Code Playgroud)

Interface Builder中的连接已设置.显示文件所有者的"连接"选项卡

'myLabel' - 'Label (myLabel)'
Run Code Online (Sandbox Code Playgroud)

任何想法为什么价值没有通过?

还有一些观察:

  • 我也连接了IBAction.单击连接按钮时,可以正确调用此方法.
  • 我得到了一些指向我的NSLog语句的指针,是否应该更好地使用tmpVC.myLabel.text,但尝试也返回NULL.
  • myLabel在界面中声明为IBOutlet UILabel*myLabel.该属性定义为非原子,保留.

有光:

在玩了一下之后,我将pushViewController语句移到了标签更新之上.这解决了标签更新问题.

工作代码如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

 myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];

 [self.navigationController pushViewController:tmpVC animated:YES];

 [tmpVC.myLabel setText:tmpObj.myTitle];   // The debugger shows the text: myTitle = "myText"
 NSLog(@"%@", tmpVC.myLabel);              // NSLog SHOWS NULL

 [tmpObj release];
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我需要先推动我的viewController ???

Hwe*_*Yar 13

那是因为只有在访问时才会懒惰地创建控制器的视图.按下控制器可访问视图.

或者,如果您添加一行来访问视图属性,它也会起作用:

  myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];
  tmpVC.view;   // Force view creation
  [tmpVC.myLabel setText:tmpObj.myTitle];   // The debugger shows the text: myTitle = "myText"
  NSLog(@"%@", tmpVC.myLabel);              // NSLog will display "myText"
  [self.navigationController pushViewController:tmpVC animated:YES];
Run Code Online (Sandbox Code Playgroud)