2017年5月5日
一. init没有执行完成就调用viewDidLoad方法
1.问题:viewDidLoad方法里面的变量需要init方法里面的对象来初始化,由于init对象没执行完成,导致viewDidLoad无法正常执行。
2.原因分析:
viewDidLoad正常是在init之后执行的,因为init方法里面调用了设置view的相关属性,导致提早去执行viewDidLoad;
3.解决方法:将view相关设置属性全部放到init最后执行(在init数据接收好后执行),或者直接在
viewDidLoad上设置也可以。
参考:
http://stackoverflow.com/questions/31489957/viewdidload-is-called-before-whole-init-method-is-executed
4.1有问题代码:
- (id)initWithReqData:(HuExerciseReqParamModel*)model withType:(HuExamType)examType
{
self = [super init];
if (self) {
self.view.backgroundColor = page_bgcolor;
}
return self;
}
//答题界面缓存数据
- (id)initWithReqData:(HuExerciseReqParamModel*)model andDBCache:(NSDictionary*)allDataDic withType:(HuExamType)examType
{
self = [self initWithReqData:model withType:examType];
if (self) {
self.allDataDic = allDataDic;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self intViewAndData];
}
4.2修改后代码:
- (id)initWithReqData:(HuExerciseReqParamModel*)model withType:(HuExamType)examType
{
self = [super init];
if (self) {
}
return self;
}
//答题界面缓存数据
- (id)initWithReqData:(HuExerciseReqParamModel*)model andDBCache:(NSDictionary*)allDataDic withType:(HuExamType)examType
{
self = [self initWithReqData:model withType:examType];
if (self) {
self.allDataDic = allDataDic;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = page_bgcolor;
[self intViewAndData];
}
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。