【问题标题】:viewWillAppear vs Viewdidload iosviewWillAppear vs Viewdidload ios
【发布时间】:2012-02-06 19:27:03
【问题描述】:

使用 iOS 导航应用程序编写代码时,我遇到了以下问题:

我可以将 UITableView 的方法“initdata”放在哪里?在 viewWillAppear 或 viewDidLoad 中?

请帮帮我。

【问题讨论】:

  • 这取决于你所说的初始化数据。

标签: ios uitableview uinavigationcontroller


【解决方案1】:

您可以根据应用程序的要求放置 initData,

如果您的表每次都需要使用新数据加载数据,那么它应该在

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    //initData
}

否则,如果表格需要由一个不变的 Data 重新加载,或者没有对 Data 执行任何编辑操作,则应使用

- (void)viewDidLoad {
    [super viewDidLoad];
   //initData
}

【讨论】:

  • 如果我把代码放在这两个地方。当我将此 tableView 推送到 UInavigationcontroller 时,它将运行该代码 2 次​​span>
  • 你应该把它放在“viewwillAppear”下,因为你的数组取决于子视图的变化值。它会起作用。
  • 永远不要在 viewWillAppear 中初始化数据。根据您将视图控制器加载到屏幕(到其他 VC 或整个 segue)的方式,它可能根本不会被调用。
  • 这实际上使两者之间的区别非常明显 - viewDidLoad 专门用于静态数据/实例化,而 viewWillAppear 用于可能始终变化的动态数据。
【解决方案2】:

最好在initWithNibName:bundle:initWithCoder:方法中调用,并在-(void)dealloc中释放加载的数据。

另外,您可以在viewDidLoad 中拥有它,并在viewDidUnload 中释放加载的数据。但最好避免从viewWillAppear: 调用它

编辑:

我希望数组取决于父视图中的选择。在这种情况下,编写一个 setter 方法,在推送视图控制器之前设置条件并初始化数据。

DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Pass the selected object to the new view controller and depend on that, load the data.
[detailViewController initData:(id)[_list objectAtIndex:indexPath.row]];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

【讨论】:

  • 就我而言,我有一个 NSArray 需要为 uitableview 做准备。这个数组的值取决于子视图的变化值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
相关资源
最近更新 更多