对不起基本问题,但现在这让我有点困扰。
我从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)'
为什么价值没有通过的任何想法?
更多观察:
有光:
在玩了一下之后,我将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 ???
答案 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
中放置一个断点来查看加载视图的时间。