Я использую Google Рекламу в своем приложении. Из-за моей цели я создал custom.
GADRewardBasedVideoAd класс. Итак, мой код выглядит так:
enum AdState {
case rewarded
case loaded
case unknown
case error
}
class VideoAd: GADRewardBasedVideoAd {
var adState: AdState = .unknown
}
И немного ViewController:
class ViewController: UIViewController {
let rewardAddNewsAd = VideoAd()
...
rewardAddNewsAd.delegate = self
}
В строке кода, где я установил сбой приложения делегата из-за
[App.VideoAd setDelegate:]: unrecognized selector sent to instance 0x281c7fd20
Если я изменю rewardAddNewsAd на класс GADRewardBasedVideoAd, а не на свой собственный подкласс, все будет работать нормально.
Этот код работал, пока Google не обновил GAD до последней версии.
Я использую Swift 4.1





Возможно, это ошибка, но, как описано в официальный сайт, GADRewardBasedVideoAd имеет одноэлементный дизайн, и вам не следует создавать свои собственные подклассы. Используйте GADRewardBasedVideoAd.shared для доступа к экземпляру класса GADRewardBasedVideoAd.
Как вариант, вы можете хранить AdState где-нибудь за пределами VideoAd. Например, в ViewController.
Я снова использовал не синглтон, но я не использовал свой подкласс для GADRewardBasedVideoAd. Пока это работало. Моя точка зрения заключалась в том, что я получал разные «монеты» за каждый объект.