我在我的应用程序中使用谷歌广告。因为我的目的,我创造了习惯。
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:]:发送到实例0x281c7fd20的选择器无法识别
如果我在GADRewardBasedVideoAd类上更改了rewardAddNewsAd,而不是我的自定义子类,那么一切都可以正常工作。
在Google将GAD更新到最新版本之前,这段代码一直在工作。
我正在使用Swift 4.1

最佳答案

也许这是一个bug,但是正如official site中所述,GADRewardBasedVideoAd有一个单例设计,您不应该创建自己的子类。使用GADRewardBasedVideoAd.shared访问GADRewardBasedVideoAd类的实例。
作为一个选项,您可以将AdState存储在VideoAd之外的某个地方。例如,在ViewController中。

10-08 05:58