首页 文章

UILabel没有更新

提问于
浏览
9

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

我从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)'

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

还有一些观察:

  • 我也连接了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 回答

  • 1

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

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

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

  • 13

    是不是因为你的 NSLog 试图打印出实际的标签对象 . 你不应该吗?

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

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

  • 1

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

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

    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];
    
  • 0

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

  • 0

    你在 myViewController.m 中的 @synthesize 属性了吗?你应该可以这样做:

    tmpVC.myLabel.text = tmpObj.myTitle;

相关问题