Ошибка AdMob с помощью [GADObjectPrivate changeState:]: непризнанный селектор
Я установил AdMob SDK 6.2.0 (Xcode 4.5 (4G182), и я тестирую iPhone 4S и симулятор). Я следил за учебником и просто хочу, чтобы AdMob показывал баннер один раз. Но он падает на последней строке:
self.bannerView = [[GADBannerView alloc]
initWithFrame:CGRectMake(0.0,
self.view.frame.size.height -
GAD_SIZE_320x50.height,
GAD_SIZE_320x50.width,
GAD_SIZE_320x50.height)];
self.bannerView.delegate = self;
self.bannerView.adUnitID = @"xREMOVEDBYMEx";
self.bannerView.rootViewController = self;
[self.view addSubview:self.bannerView];
GADRequest * request = [GADRequest request];
request.testing = YES;
[self.bannerView loadRequest:request];
Авария
2012-09-28 09: 03: 58.268 NewProject [1467: c07] - [GADObjectPrivate changeState:]: нераспознанный селектор, отправленный в экземпляр 0x95c17d0 2012-09-28 09: 03: 58.276 NewProject [1467: c07] * Завершение приложения из-за неотображенного исключения "NSInvalidArgumentException", причина: '- [GADObjectPrivate changeState:]: непризнанный селектор, отправленный экземпляру 0x95c17d0'
Это выглядит как ошибка в библиотеке для меня, но я думаю, что это очень маловероятно. Любые мысли?
EDIT: тот же самый код работает в примерах проектов. Есть ли что-то, что я могу сделать с файлом проекта, что приведет к этой ошибке?
Ответы
Ответ 1
Вам нужно добавить -ObjC
к другим флагам компоновщика вашего целевого значения сборки приложения:
- Нажмите синий значок проекта верхнего уровня в XCode
- Выберите свою цель и перейдите к настройкам сборки
- В разделе Другие флаги компоновщика добавьте
-ObjC
для выпуска и отладки
Источник: https://developers.google.com/mobile-ads-sdk/docs/admob/mediation#ios-linker
Также не забудьте сделать чистую и перестроить
Ответ 2
Лучшее решение для меня - использовать флаг -force_load вместо -ObjC
![enter image description here]()
Ответ 3
Если у вас все еще есть проблемы, убедитесь, что он -ObjC и не -Objc. Geez, потраченные недели, пытаясь понять, почему.
Ответ 4
Для тех из вас, кто попытался добавить флаг компоновщика Obj-c и по-прежнему получил ту же ошибку "непризнанный селектор, отправленный на экземпляр" при попытке загрузить объявление, я нашел исправление. Это для новейшего XCode (версия 8.1).
Для справки:
- Я добавил Google AdMob, используя cocoapods.
- Я использовал раскадровку, чтобы установить выходное соединение с моим контроллером view, а GADBannerView был NOT доступен как класс, поэтому я написал его, как это делали большинство людей.
- В одном из ответов stackoverflow, который я видел, пользовательский класс для bannerview был настроен на GADBannerView, который, как я предполагаю, будет происходить автоматически, если бы он был вариантом в раскрывающемся списке, когда вы добавляли выход. Для меня это не было, так как мне пришлось набирать его в себе.
![Нет специального класса, указанного screengrab]()
Глядя на раскрывающийся список, я увидел, что GADBannerView доступен как опция и выбрал его.
![Доступен класс GADBannerView]()
После его выбора приложение запускается без заминки, не нужно добавлять флаг компоновщика (мой по умолчанию был пустым) или что-то еще.
Надеюсь, это поможет кому-то еще!