iPhone - 未设置NSString值

时间:2009-11-26 05:59:33

标签: iphone objective-c

在UIViewController内部,我正在执行以下操作:


TVController* stopTimes = [ [ TVController alloc ] initWithStyle: UITableViewStyleGrouped ];
stopTimes.tableView.frame = CGRectMake( 0, 180, 320, 280 );
stopTimes.tableView.backgroundColor = [ UIColor whiteColor ];
stopTimes.theID = stopID;
[ self.view addSubview: stopTimes.tableView ];

其中TVController是一个UITableViewController。

在TVController类中,我有一个名为theID的NSString属性,它已被合成。在上面执行'stopTimes.theID = stopID'时我没有出错,并且TableView按预期显示。

在这个TVController类的'viewDidLoad'中,我只是尝试NSLog'theID'来表明它有效,但无论我做什么都是(null)。

但是,我尝试将单元格的文本设置为“theID”,它运行得很好。

那么为什么在设置单元格时“theID”设置正确,而在viewDidLoad中却没有?

1 个答案:

答案 0 :(得分:1)

viewDidLoad将在加载视图后立即从NIB或loadView的实现中调用。视图在第一次访问视图控制器的视图属性时加载,而不是在分配视图控制器时或稍后的某个时刻加载。

这意味着loadView(其默认实现加载你的NIB,如果有的话)然后viewDidLoad在第二行上第一次被调用,因为你正在访问视图控制器的tableView属性,当然在您实际为视图控制器的theID属性设置值之前发生。当然,当你的表格内容被加载时(直到桌面视图实际出现才会发生,除非你自己在其他地方调用-reloadContent),你的theID属性已被设置。

您可以通过在调试器中设置两个断点来测试自己 - 一个位于上面代码片段的第三行,其中您设置了ID属性,另一个位于viewDidLoad中的NSLog()调用上。您将看到先触发后一个断点。

P.S。欢迎来到Stack Overflow!不要忘记阅读常见问题解答,并为您的问题标记已接受的答案(当然,如果这些答案是值得接受的好答案)。