저는 삽입 광고의 표시 여부를 웹 서비스에 쿼리하는보기 컨트롤러가 있습니다. 그렇다면 presentViewController : animated : completion :을 사용하여 또 다른보기 컨트롤러가 인스턴스화되고 표시됩니다. this answer 및 docs에 따르면 viewDidAppear : 제공된 뷰 컨트롤러를 해제 할 때 호출되지 않을 것이라고 가정합니다 (자체적으로 수행합니다). 개념적으로 나에게도 어쨌든 프리젠 테이션 뷰 컨트롤러의 뷰는 뷰 계층 구조에서 제거되지 않으므로 "다시 표시"할 필요가 없습니다. 나는 틀렸어. 그래서 무슨 일이 일어나고있는거야? 왜 내가 본 문서가 말하는 것과 다른 것입니까?viewDidAppear : presentViewController를 사용할 때 호출됩니다. 애니메이션 : 완료 :
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[AdService sharedAdService] adForSlotName:@"Main Interstitial" completionBlock:^(Ad *adForSlotName) {
if(adForSlotName)
{
InterstitialAdViewController_iPhone *interstitialAdViewController = [[InterstitialAdViewController_iPhone alloc] init];
interstitialAdViewController.ad = adForSlotName;
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(mainQueue, ^{
[self presentViewController:interstitialAdViewController animated:YES completion:^{}];
});
[interstitialAdViewController release];
}
}];
}
- (void)viewWillDisappear:(BOOL)animated
{
[[AdService sharedAdService] clearAdForSlotName:@"Main Interstitial"];
[super viewWillDisappear:animated];
}
어떤 시점에서 viewDidAppear을 수신중인보기는 어느 것입니까? 내게 그것은 당신의 질문에 불분명하게 보인다. viewDidAppear은 뷰가 나타날 때마다 호출된다고 가정합니다. 출현은 일단 뷰가 제시되면 일어날 수 있지만 이전에 뷰를 덮은 뷰가 제거 (해고)되면 기본 뷰에서도 발생합니다. – Till
사과, viewDidAppear : 현재보기 컨트롤러에서 표시 컨트롤러가 해제 될 때마다 호출됩니다. – rob5408
은 내 첫 번째 의견의 두 번째 부분에서 초안을 작성한 것으로 내 예상과 일치하며 정확히 있어야합니다. – Till