最近有給我反饋CDDPagerController框架有點(diǎn)小Bug,查看下源碼還真是,生命周期那還真出了問題瓦堵。我花了點(diǎn)時(shí)間解決了并重新更新的框架。
cd 項(xiàng)目 return pod update 更新下 最新版本 1.1.1
成功更新如下:
Installing CDDPagerController 1.1.1 (was 1.1.0)
Bug重現(xiàn)
有時(shí)候我們的父子控制器的標(biāo)題數(shù)組是通過服務(wù)器請(qǐng)求返回的歌亲,這樣就造成一種情況延遲菇用。所以我進(jìn)行了如下的模擬
#pragma mark - 添加所有子控制器
- (void)setUpAllChildViewController
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //模擬網(wǎng)絡(luò)延遲
NSArray *titles = @[@"測(cè)試01",@"測(cè)試02",@"測(cè)試03",@"測(cè)試04",@"測(cè)試05",@"測(cè)試06",@"測(cè)試07",@"測(cè)試08",@"測(cè)試09"];
for (NSInteger i = 0; i < titles.count; i++) {
UIViewController *vc = [UIViewController new];
vc.title = titles[i];
vc.view.backgroundColor = RandColor; //隨機(jī)色
[self addChildViewController:vc];
}
});
}
GIF很直接的可以看出,模擬網(wǎng)絡(luò)延遲之后陷揪,父子控制器并未能正常加載惋鸥。可以看出很有可能是等模擬網(wǎng)絡(luò)延遲在
addChildViewController
的時(shí)候悍缠,框架內(nèi)部的生命周期已經(jīng)結(jié)束了卦绣。
解決方案
我在DCPagerController.h聲明類方法,供網(wǎng)絡(luò)延遲使用
/**
刷新標(biāo)題和整個(gè)界面扮休,在調(diào)用之前迎卤,需要獲取到所有的子控制器。
*/
- (void)setUpRefreshDisplay;
然后在網(wǎng)絡(luò)延遲add之后調(diào)用刷新方法
#pragma mark - 添加所有子控制器
- (void)setUpAllChildViewController
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //模擬網(wǎng)絡(luò)延遲
NSArray *titles = @[@"測(cè)試01",@"測(cè)試02",@"測(cè)試03",@"測(cè)試04",@"測(cè)試05",@"測(cè)試06",@"測(cè)試07",@"測(cè)試08",@"測(cè)試09"];
for (NSInteger i = 0; i < titles.count; i++) {
UIViewController *vc = [UIViewController new];
vc.title = titles[i];
vc.view.backgroundColor = RandColor; //隨機(jī)色
[self addChildViewController:vc];
}
[self setUpRefreshDisplay]; //刷新
});
}