美文网首页
iOS 创建VC时赋值大坑

iOS 创建VC时赋值大坑

作者: 谁知洛神赋 | 来源:发表于2018-01-17 19:33 被阅读0次

需求是创建一个VC,创建后赋值参数,然后VC内部方法将利用此VC初始化时被赋值的全局变量作为参数进行网络请求,初始化如下:

1- (FlightDomesticFreeViewController *)freeDomesticFlightViewController
2{
3  if (_freeDomesticFlightViewController) {
4       return _freeDomesticFlightViewController;
5    }
6   _freeDomesticFlightViewController = [[TNBoss3FlightDomesticFreeViewController alloc] init];
7   _freeDomesticFlightViewController.adultNum = self.adultNum;
8   _freeDomesticFlightViewController.childNum = self.childNum;
9   _freeDomesticFlightViewController.currentSeqNum = 1;
10  _freeDomesticFlightViewController.baseSinglePriceArray = self.baseSinglePriceArray;
11  _freeDomesticFlightViewController.basePackagePrice = self.basePackagePrice;
12   _freeDomesticFlightViewController.productInfo = self.freeFlightInfoDict[PRODUCT_INFO];
13   _freeDomesticFlightViewController.selectedFlights = self.freeFlightInfoDict[SELECT_FLIGHT];
14    _freeDomesticFlightViewController.departureCityCode = self.freeFlightInfoDict[DEPARTURE_CITY_CODE];
15   _freeDomesticFlightViewController.backCityCode = self.freeFlightInfoDict[BACK_CITY_CODE];
16   _freeDomesticFlightViewController.queryFlight = self.queryFlight;
17   _freeDomesticFlightViewController.bookCity = self.bookCity;
18   _freeDomesticFlightViewController.delegate = self;
19   _freeDomesticFlightViewController.isChangeOrder = self.isChangeOrder;
20   _freeDomesticFlightViewController.view.frame = self.freeContentView.bounds;
21   _freeDomesticFlightViewController.journeyId = self.baseInfo.journeyId;
22   [_freeContentView addSubview:_freeDomesticFlightViewController.view];
    
23   [self addChildViewController:_freeDomesticFlightViewController];
24    return _freeDomesticFlightViewController;
}

然后测试告诉我入参没有journeyId这个字段,后来经过反复断点调试,发现20行执行完以后便会调入VC的内部方法,进行网络请求,而此时21行journeyId还未赋值,所以导致入参此字段为空。原因就是因为20行执行后,VC的viewDidLoad会执行,也就是开始执行VC的内部方法,故这种初始化属性方式不可在设置frame方法后,也就是将21行代码放在20行之前,便可避免这种低级错误。

相关文章

  • iOS 创建VC时赋值大坑

    需求是创建一个VC,创建后赋值参数,然后VC内部方法将利用此VC初始化时被赋值的全局变量作为参数进行网络请求,初始...

  • viewDidLoad 多次创建视图对象

    -(void)viewDidLoad多次创建视图对象 场景 外部创建vc,并在对vc属性赋值时(vc.dataSo...

  • iOS 计算文本宽、高

    iOS 计算文本宽、高 创建两个 UILabel 并赋值:- (void)viewDidLoad {[super ...

  • grails学习(六)--问题小结

    1.大坑: 在BootStrap中有自动添加几种书的记录时,要把所有的属性都要赋值,不然记录添加不到表中,同时赋值...

  • 'Storyboard doesn't cont

    在原有工程storyboard里创建vc,结果跳转时找不到 需要给vc,设置class,storyboard id

  • iOS 13 bug

    一, iOS 13 vc present viewcontrolller 时默认人成了 automoti...

  • iOS项目中常见的内存泄漏场景

    1. 计时器NSTimer 一方面timer作为VC的属性,被VC强引用,创建timer对象时VC作为target...

  • iOS 10 UIImagePickerViewControll

    iOS 10以后,直接使用UIImagePickerViewController时,弹出VC的时候会导致Crash...

  • MRC内存管理

    以MRC为实验 使用属性赋值 使用实例变量赋值 全局的属性在VC的dealloc中释放。

  • spring的循环依赖

    当Aservice类里有Bservice,当Bservice类里有Aservice时, 创建a时,需要赋值b,创建...

网友评论

      本文标题:iOS 创建VC时赋值大坑

      本文链接:https://www.haomeiwen.com/subject/cdnuoxtx.html