【发布时间】:2016-09-07 13:08:40
【问题描述】:
我有一个UIViewController 子类,而我有一个UITableView。这是我目前使用viewDidLoad & viewWillAppear 的方式。
-(void)viewDidLoad
{
//Setup my datasource
//Setup my views, tableviews, constraints
}
-(void)viewWillAppear:(BOOL)animated
{
//Setup my datasource
}
viewDidLoad 只会在构造视图时调用一次。每次访问视图控制器时都会调用viewWillAppear。
在这里,我为什么在两个地方都设置我的数据源(NSArray)是,每当我进入视图控制器时,我只需要重建数据源数组。
我可以这样做。
-(void)viewDidLoad
{
//Setup my views, tableviews, constraints
}
-(void)viewWillAppear:(BOOL)animated
{
//Setup my datasource
//Reload tableview
}
但是,当视图控制器出现时,显示数据感觉有点慢。
问题:
设置数据源数组的最佳做法是什么?我不希望仅在viewWillAppear 中设置延迟。还是应该像这样设置数据源?
-(void)viewDidLoad
{
//Setup my datasource
//Setup my views, tableviews, constraints
}
-(void)viewWillAppear:(BOOL)animated
{
//Setup my datasource
//Reload tableview
}
如果是,第一次,我需要计算两次数据源数组。
为了克服这个问题,我需要通过在viewDidLoad 中设置它来保持BOOL 像 isFirstTime 的值(存储在NSUserDefaults)并在viewWillAppear 方法中检查它,就像这个:
-(void)viewDidLoad
{
//Set isFirstTime as YES
//Setup my datasource
//Setup my views, tableviews, constraints
}
-(void)viewWillAppear:(BOOL)animated
{
if(isFirstTime)
{
//Skip
isFirstTime = NO;
}
else
{
//Setup my datasource
//Reload tableview
}
}
我真的应该做这么复杂的事情来实现这一目标吗?需要建议!!
谢谢
【问题讨论】:
-
除了
viewDidLoad之外,为什么你认为你需要设置这些? -
当我访问其他视图控制器时,我的数据源会定期更改。
标签: ios objective-c datasource viewdidload viewwillappear