为什么在AppDelegate(Swift)中添加iOS AdMobs GADBannerView会导致sigabrt?
我无法在iOS应用中获取AdMob广告。 我收到了一个具体的错误,我会在下面给你看,但首先这里是我试过的。为什么在AppDelegate(Swift)中添加iOS AdMobs GADBannerView会导致sigabrt?
这里就是我试过
- 一旦我得到的错误在我的主应用程序,我检索到的官方BannerExample,并得到了它成功运行。 BannerView示例应用程序正在运行,我看到广告在我的iPhone 5s模拟器上运行时出现在应用程序中。
- 我已经完成了所有方式的pod更新,以确保我拥有所有必需软件包的确切新版本,并牢记应用程序的构建没有问题。
- 我已将它调试到一行代码,我将在下面给您看。
现在你知道我已经做了相当多的工作,看看发生了什么。
该应用崩溃
确切的错误是:
CYaPass [13155:433036] [MC]从私人有效用户 设置读。 Google Mobile Ads SDK版本:afma-sdk-i-v7.15.0 2016-12-04 14:37:26.046 CYaPass [13155:432944] - [UIView loadRequest:]: 无法识别的选择器已发送到实例 0x7f8bf4546090 2016- 12-04 14:37:26.055 CYaPass [13155:432944] ***终止应用程序由于未捕获 例外
这不是AppDelegate中错误的正常SIGABRT。 我已经尝试了所有与StoryBoard相关的常规事物,并且这是一张图片,向您展示了我没有任何未定义的内容。另外,我会告诉你,当我删除一行AdMob代码时,应用程序将正常运行。
你可以看到,我有对我试图使用的BannerView了UIView定义的两个出口。这样我可以在删除一行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;
}
,唯一的变化是我评论了这三条线。这是它运行时的样子。
分页查看应用程序
顺便说一句,这是一个标签式的应用程序。所以这个应用程序出现了,我点击设置选项卡,你可以看到loadAd()中改变的代码运行并将UIView的背景变成黑色。
要点:特定的代码会导致问题
现在,让我告诉你,如果我取消的横幅广告代码只是第一行,然后在AppDelegate的应用程序崩溃。
这里的改变loadAd()
再次:
func loadAd(){
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
//AdMobs.rootViewController = self
//AdMobs.load(GADRequest())
SuperView.backgroundColor = UIColor.black;
}
同样,你可以看到,我只有注释掉一条线,设置在GADBannerView adUnitId设置。这与BannerExample使用的代码完全相同。它甚至使用相同的测试unitId,这对每个人都是免费的测试。此外,即使您将unitId更改为无效值,应用程序也不会崩溃,但广告只是不显示。
这里的结果
调试出了码的精确线
我可以进入的代码,它正是我们刚才添加时loadAd()行发生此错误(如下所示,以供参考):
AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716"
唯一区别:选项卡式视图 - 是问题吗?
唯一有效的区别是我的应用程序基于tabbedview。 有谁知道为什么会发生这种情况?
我已经尝试了近2天的一切。任何帮助表示赞赏。