我很难让AdMob广告在我的iOS应用程序中工作。我得到了一个具体的错误,我将在下面向你们展示,但首先是我尝试过的。
,这是我尝试过的,
现在你知道我已经做了很多工作了,看看发生了什么。
应用程序崩溃
确切的错误是:
CYaPass13155:433036从私有有效用户设置读取。Google移动Ads SDK版本: afma-sdk-i-v7.15.0 2016-12-04 14:37:26.046 CYaPass13155:432944 -UIView loadRequest::未识别的选择器发送给实例 0x7f8bf4546090 2016-12-04 14:37:26.055 CYaPass13155:432944 *
这不是AppDelegate错误上的标准大小。我已经尝试过与StoryBoard相关的所有正常的东西,这是一张图片,它向您展示了我没有任何未定义的项目来破坏它。另外,我将向您展示,当我删除一行AdMob代码时,应用程序将正常运行。

您可以看到,我确实在UIView上定义了两个出口,我正试图将其用于BannerView。这样我就可以在删除一行AdMob代码时对其进行测试。
您还可以在SettingsController上看到这些网点。

您可以在我的实际控制器代码中看到它们,如下所示:
@IBOutlet weak var AdMobs: GADBannerView!
@IBOutlet weak var SuperView: UIView!
func loadAd(){
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
AdMobs.rootViewController = self
AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}我将这些行分隔到loadAd() func中,以便可以从不同的位置测试它们,但这是BannerExample在viewDidLoad() func中使用和调用的相同代码。
小型测试在UIView上的应用
然后,您可以看到,我还在完全相同的UIView (SuperView)上做了一些工作,其中将backgroundColor设置为黑色。
这是为了让我自己相信,这不仅仅是因为我在那个UIView上附加了一个出口。但是,如果我简单地注释掉前面的三行代码,代码就能正常工作了。
在这里,我将运行它并向您展示输出。在我这样做之前,这里是我的AppDelegate应用程序构造函数,它不会改变。它实际上是官方BannerExample的一个副本:
import Firebase
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate{
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
GADMobileAds.configure(withApplicationID: "ca-app-pub-myapp-hiddenforpublicConsumption")
return true
}现在,我将更改loadAd()如下所示,并再次运行:
func loadAd(){
//AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
//AdMobs.rootViewController = self
//AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}显然,唯一的变化是我评论了这三行。这是它运行时的样子。
选项卡视图应用程序
顺便说一句,这是一个标签应用程序。于是,应用程序出现了,我点击了Settings选项卡,您可以看到loadAd()中修改过的代码运行并将UIView的背景变为黑色。

要点:特定代码导致问题
现在,让我向您展示,如果我只取消注释第一行条幅广告代码,那么应用程序就会在AppDelegate.中崩溃。
以下是修改后的loadAd():
func loadAd(){
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
//AdMobs.rootViewController = self
//AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}同样,您可以看到,我只取消了在GADBannerView上设置GADBannerView的一行注释。这是BannerExample使用的完全相同的代码。它甚至使用相同的测试unitId,对每个人的测试都是免费的。而且,即使你将unitId更改为无效值,应用程序也不会崩溃,广告也不会出现。
,这是结果

调试显示了代码的精确行
我可以进入代码,这正是在发生此错误时添加的loadAd()行(如下所示,以供明确参考):
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"唯一的区别:选项卡式视图--这是问题所在吗?
唯一有效的区别是我的应用程序是基于选项卡视图的。有人知道为什么会发生这种事吗?
我已经试了差不多两天了。任何帮助都是非常感谢的。
发布于 2016-12-04 23:28:04
痛苦.我终于找到了答案。
首先,在这里你可以看到我取得了成功。

视图类型必须更改
如果您转到故事板并检查该UIView,您将看到它如下所示:

但是,这有点道理,因为我们得到的错误看起来不是一个GADBannerView:
UIView setAdUnitID::发送到实例的未识别选择器
这就是让我找到答案的线索。
您必须将值更改为GADBannerView (只需在UIView上输入该值):

我还证实,在官方示例中,类型被正确地设置为。大概36个小时我再也回不来了。我错过了初始文档中的这一步,因此这是“椅子和键盘之间的错误”。
发布于 2018-04-12 13:26:11
如果其他人也有同样的问题,并且不知道发生了什么,我就会遇到一个类似的错误。
去查看广告,然后下到上面写着Label的地方。把它改成你的名字,这对我有用。
还要确保module是空的,并且取消了inherit module from target。
https://stackoverflow.com/questions/40963280
复制相似问题