Как добавить BannerViewController

У меня есть проект, созданный на основе классического шаблона Master Detail, предоставленного Xcode из коробки. Я пытаюсь внедрить iAdSuite BannerViewController, но без особого успеха.

Я добавил BannerViewController.m и .h в свой проект, но не могу заставить свое приложение вызывать viewDidLoad в BannerViewController. Я довольно подробно изучил пример TabbedBanner и до сих пор не вижу, где "привязан" BannerViewController.

Попытался добавить BannerViewController в качестве дочернего контроллера представления.

BannerViewController *vbc = [[BannerViewController alloc] init];
[navigationController addChildViewController:vbc];

Этот код приводит к трагическому финалу.

Будем признательны за любое понимание этого примера кода или подсказки, где найти дополнительную информацию об использовании общего баннера.


person Sean Murphy    schedule 02.05.2015    source источник
comment
Этот код приводит к трагическому финалу. Хахаха, что!? Чего именно вы хотите добиться и что на самом деле делает ваш код?   -  person luk2302    schedule 02.05.2015
comment
Он создает необработанное исключение в addBannerViewController. Основная цель — использовать один экземпляр баннера iAd во всем приложении, чтобы сократить время загрузки объявления и максимизировать доход (согласно документации iAd).   -  person Sean Murphy    schedule 02.05.2015
comment
.... какое исключение .... ?   -  person luk2302    schedule 02.05.2015
comment
*** Завершение работы приложения из-за необработанного исключения "NSRangeException", причина: "*** -[__NSArrayI objectAtIndex:]: индекс 0 за пределами пустого массива"   -  person Sean Murphy    schedule 02.05.2015
comment
И что это говорит нам? вы пытаетесь получить доступ к элементу в пустом массиве! где вы это делаете, xcode должен указать вам метод и строку и показать трассировку стека, где произошла ошибка?   -  person luk2302    schedule 02.05.2015
comment
Точно, поэтому я не уверен, что я даже на правильном пути. У меня такое ощущение, что я добавляю один кладж к другому. ` _contentController = children[0];`, вероятно, является основной причиной. Хотя, что интересно, утверждение не срабатывает. Я получаю полную трассировку стека, просто не включил ее сюда.   -  person Sean Murphy    schedule 02.05.2015
comment
И почему вы обращаетесь к children[0], где вы добавляете что-то в этот массив? Если вы этого не сделаете, то это ничего не значит, и поэтому вы не можете получить к нему доступ.   -  person luk2302    schedule 02.05.2015
comment
Дальнейшие исследования показывают, что для iOS 7 и более поздних версий метод BannerViewController на самом деле не нужен. Он заменен кодом self.canDisplayBannerAds = YES; Форум разработчиков Apple   -  person Sean Murphy    schedule 02.05.2015
comment
Я не знаком с iAdSuite BannerViewController, который вы упомянули в своем вопросе. Можете дать ссылку? Если вы хотите добавить баннер программно, вот ответ, который показывает, как это сделать: stackoverflow.com/a/28708377/ 2108547 . Другой вариант — использовать self.canDisplayBannerAds = YES. Добавьте это к своему viewDidLoad, и все готово. Однако этот метод реализации вашего ADBannerView не даст большого контроля.   -  person Daniel Storm    schedule 03.05.2015
comment
Существует два набора примеров кода: iAdSuite и iAdSuite_with_storyboards.   -  person Sean Murphy    schedule 09.05.2015


Ответы (1)


В раскадровке: добавьте новый контроллер представления, установите его класс на bannerViewController и добавьте представление контейнера в этот VC. Второй VC будет добавлен, когда вы добавите представление контейнера, удалите его.

Удалите переход между корневым контроллером навигации и контроллером табличного представления.

Добавьте «корневой переход контроллера представления» между контроллером навигации и контейнером, представлением и «встроенным переходом» между представлением контейнера и представлением таблицы.

Вам нужно будет настроить код настройки фрейма в bannerViewController->viewDidLayoutSubviews, чтобы учесть панель навигации в контроллере навигации. Это даст вам рекламные баннеры в табличном представлении, мне еще предстоит выяснить, как заставить их отображаться в подробном представлении.

Удачи.

person mikejl    schedule 16.05.2015