代码之家  ›  专栏  ›  技术社区  ›  dc.

iPhone-未设置nsstring值

  •  1
  • dc.  · 技术社区  · 15 年前

    在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”来显示它是否有效,但是不管我做什么,它都是(空)。

    但是,我尝试将一个单元格的文本设置为“theid”,它工作得很好。

    那么,为什么在设置单元格时“theid”设置正确,而不是在viewdidload中?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Bryan Henry    15 年前

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

    这意味着LoadView(如果您有NIB,加载NIB的默认实现)和ViewDidLoad在第二行第一次被调用,因为您正在访问视图控制器的TableView属性,当然,这发生在您实际为视图控制器的TheID属性设置值之前。当然,在加载表内容时(除非您自己在其他地方调用-reloadcontent,否则在表视图实际出现之前不会发生这种情况),已经设置了theid属性。

    通过在调试器中设置两个断点(一个位于上面设置theid属性的代码段的第三行,另一个位于viewdidload中的nslog()调用),您可以非常简单地测试自己。您将看到后一个断点是首先触发的。

    欢迎使用堆栈溢出!不要忘记阅读常见问题解答,并为你的问题标记接受的答案(当然,如果它们是值得接受的好答案)。