UILabel没有更新

时间:2010-04-27 11:20:42

标签: 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];
}

设置Interface Builder中的连接。文件所有者的“连接”选项卡显示

'myLabel' - 'Label (myLabel)'

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

更多观察:

  • 我也连接了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];
}

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

5 个答案:

答案 0 :(得分: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];

答案 1 :(得分:1)

如果tmpVC.myLabel为NULL,则可能表示您尚未在Interface Builder中从UILabel到myLabel实例变量进行必要的连接。

答案 2 :(得分:1)

@synthesize中的myLabel财产是myViewController.m了吗?您应该可以执行以下操作:

tmpVC.myLabel.text = tmpObj.myTitle;

答案 3 :(得分:0)

是不是因为您的NSLog正在尝试打印出实际的标签对象。如果你没有

NSLog(@"%@", tmpVC.myLabel.text);

回复添加的信息:您的其他问题似乎是您已将NSString与您的标签相关联。您必须将其链接到UILabel。因此,在您声明myLabel var的地方,将其更改为UILabel *myLabel,并将其更改为任何匹配的属性。

答案 4 :(得分:0)

不确定,但我认为这是正在发生的事情:

当按下视图时,控制器从笔尖加载视图并挂钩动作和出口。在此之前,插座没有连接,所以tmpVC.myLabel是零。

如果你想确定,你可以在tmpVC的viewDidLoad中放置一个断点来查看加载视图的时间。