对不起基本问题,但现在这让我有点困扰.
我从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)
任何想法为什么价值没有通过?
还有一些观察:
有光:
在玩了一下之后,我将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)