У меня есть приложение, которое использует AdBannerView, определенный xib. Если приложение работает на iPhone (4 или 5), все работает как положено, показывается реклама, скрываются/показываются баннеры и т. д.
Однако, если приложение запущено на iPad, оно аварийно завершает работу из-за того, что не может получить рекламу. Изучение стека вызовов показывает повторяющиеся вызовы bannerView:didFailToReceiveAdWithError:
Наблюдение за распределением памяти во время работы на iPad показывает непрерывный рост памяти вплоть до сбоя.
Игра с сетевым подключением, похоже, не меняет того факта, что он работает на iPhone, но не на iPad.
Я прочитал этот вопрос SO, который вместо использования AdBannerView в xib он создает его на лету, а затем выпускает, когда объявление не загружается.
ИЗМЕНИТЬ:
Я изменил настройки устройств в файле проекта с iPhone на Universal. Приложение теперь не вылетает, но, конечно, все представления теперь «перепутались». Таким образом, одним из вариантов исправления может быть внедрение идиомы iPad во всем приложении.
Мои вопросы -
Что здесь происходит? Нет, правда! Я не понимаю, почему разные устройства ведут себя по-разному.
Должен ли я создавать AdBannerView программно? Похоже на пораженчество.
Как я могу исправить это поведение?
Вот код
#pragma mark ADBannerViewDelegate
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
[self showBanner];
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
[self hideBanner];
}
- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{
[self hideBanner];
}
#pragma mark ADBanner helpers
- (void)hideBanner
{
CGRect hiddenFrame = self.bannerDisplayFrame;
hiddenFrame.origin.y = self.view.frame.size.height;
[UIView animateWithDuration:0.3f
animations:^{
[self.adBannerView setFrame:hiddenFrame];
}
completion:^(BOOL finished)
{
if (finished)
{
[self.adBannerView setAlpha:0.0f];
}
}];
}
- (void)showBanner
{
[self.adBannerView setAlpha:1.0f];
[UIView animateWithDuration:0.3f
animations:^{
[self.adBannerView setFrame:self.bannerDisplayFrame];
}
completion:^(BOOL finished)
{
if (finished)
{
[NSTimer scheduledTimerWithTimeInterval:60.0f target:self selector:@selector(hideBanner) userInfo:nil repeats:NO];
}
}];
}