2016-12-04 79 views
2

我無法在iOS應用中獲取AdMob廣告。 我收到了一個具體的錯誤,我會在下面給你看,但首先這裏是我試過的。爲什麼在AppDelegate(Swift)中添加iOS AdMobs GADBannerView會導致sigabrt?

這裏就是我試過

  1. 一旦我得到的錯誤在我的主應用程序,我檢索到的官方BannerExample,並得到了它成功運行。 BannerView示例應用程序正在運行,我看到廣告在我的iPhone 5s模擬器上運行時出現在應用程序中。
  2. 我已經完成了所有方式的pod更新,以確保我擁有所有必需軟件包的確切新版本,並牢記應用程序的構建沒有問題。
    1. 我已將它調試到一行代碼,我將在下面給您看。

現在你知道我已經做了相當多的工作,看看發生了什麼。

該應用崩潰

確切的錯誤是:

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代碼時,應用程序將正常運行。

controller outlets

你可以看到,我有對我試圖使用的BannerView了UIView定義的兩個出口。這樣我可以在刪除一行AdMob代碼時對其進行測試。

您還可以看到在SettingsController這些網點

outlet 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的背景變成黑色。 uiview background black

要點:特定的代碼會導致問題

現在,讓我告訴你,如果我取消的橫幅廣告代碼只是第一行,然後在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更改爲無效值,應用程序也不會崩潰,但廣告只是不顯示。

這裏的結果

crash

調試出了碼的精確線

我可以進入的代碼,它正是我們剛纔添加時loadAd()行發生此錯誤(如下所示,以供參考):

AdMobs.adUnitID = "ca-app-pub-3940256099942544/2934735716" 

唯一區別:選項卡式視圖 - 是問題嗎?

唯一有效的區別是我的應用程序基於tabbedview。 有誰知道爲什麼會發生這種情況?

我已經嘗試了近2天的一切。任何幫助表示讚賞。

回答

1

哦,痛苦......我終於找到了答案。

首先,在這裏你可以看到我獲得了成功。查看的

success

類型必須改變

如果你到故事情節並檢查的UIView你會看到它看起來像以下: uiview type

然而,那種有道理,因爲它不是一個GADBannerView,我們得到的錯誤看起來像:

[UIView的setAdUnitID:]:無法識別的選擇發送到實例

。那是讓我答案的線索。

您必須將值更改爲GADBannerView上(只是在盒子上的UIView鍵入):

make class GADBannerView

我還證實,在官方的例子,該類型設置正確有。 大約36個小時,我永遠不會回來。 我錯過了初始文檔中的這一步,因此這是「椅子和鍵盤之間的錯誤」。