SWIFT - делегаты и протоколы - PullRequest
0 голосов
/ 26 января 2020

Мне нужна помощь в определении проблем в этом коде. Я думаю, что я пытаюсь сделать что-то глупое здесь. Я создаю класс (класс рекламы), который будет загружать рекламу в моем приложении. Я пытаюсь использовать быстрые делегаты, чтобы при успешной загрузке рекламы я мог вызвать функцию в своем основном классе для отображения рекламы. Проблема, с которой я сталкиваюсь, заключается в том, что фактические методы делегата (bannerDidFinishLoading, didFailToLoadWithError ...) для этого класса рекламы не вызываются. Я думаю, что он был освобожден после возврата метода, и именно поэтому методы делегата не были вызваны. В журналах, если вы заметили, ни один из делегатов для рекламных баннеров не вызывается из класса рекламы, но журналы действительно показывают, что объявления были получены и успешно загружены.

Любая помощь будет принята с благодарностью. Заранее спасибо.

advertising.swift:


import UIKit
import InMobiSDK
import AdSupport

let INMOBI_BANNER_PLACEMENT2: Int64 = 111111111

protocol bannerViewDelegate:class {
    func bannerViewCalled(banner: IMBanner?)
}

class advertisement: UIViewController, IMBannerDelegate {

    var banner: IMBanner?

    weak var delegatex: bannerViewDelegate?

    func loadBanner() {
        print ("Inside Load")
        banner = IMBanner.init(frame: CGRect(x: 0, y: 0, width: 320, height: 50), placementId: INMOBI_BANNER_PLACEMENT2)
        banner?.delegate = self
        banner?.load()
        banner?.shouldAutoRefresh(true)
        banner?.refreshInterval = 45
    }

    deinit {
        print("Deinit Called")
    }


    public func bannerDidFinishLoading(_ banner: IMBanner!) {
        print("bannerDidFinishLoading")
        delegatex?.bannerViewCalled(banner: banner!)
    }


    public func banner(_ banner: IMBanner!, didFailToLoadWithError error: IMRequestStatus!) {
        print("didFailToLoadWithError")
    }

    public func bannerWillPresentScreen(_ banner: IMBanner!) {
        print("bannerWillPresentScreen")
    }

    public func bannerDidPresentScreen(_ banner: IMBanner!) {
        print("bannerDidPresentScreen")
    }

    public func bannerWillDismissScreen(_ banner: IMBanner!) {
        print("bannerWillDismissScreen")
    }

    public func bannerDidDismissScreen(_ banner: IMBanner!) {
        print("bannerDidDismissScreen")
    }

}

Основной класс вызывающей рекламы:

import UIKit
import InMobiSDK
import AdSupport

class sample: UIViewController, bannerViewDelegate, IMBannerDelegate {

    var bannerx: IMBanner?

    override func viewDidLoad() {
        super.viewDidLoad()

        //bannerx?.delegate = self

        print("before call")
        let obj1 = advertisement()
        obj1.delegatex = self
        obj1.loadBanner()
        print("after call")

    }

    func bannerViewCalled(banner: IMBanner?) {

        print("return delegate")
        let tabBar_MinY: CGFloat!       // Starting poition of tab bar
        tabBar_MinY = self.tabBarController?.tabBar.frame.minY
        let adView = UIView()
        adView.frame = CGRect(x: 0, y: tabBar_MinY - 50, width: self.view.bounds.width, height: 50)
        bannerx = banner
        adView.addSubview(bannerx!)
        self.view.addSubview(adView)
    }

}

Вход в консоль:

before call
Inside Load
after call
[InMobi] | 2020.01.26 12:37:34.147 | 1004 |  Fetching banner ad for placement id: 111111111
Deinit Called
[InMobi] | 2020.01.26 12:37:34.926 | 1001 |  Loading Banner ad for placement id: 111111111
[InMobi] | 2020.01.26 12:37:34.929 | 1001 |  Banner ad successfully fetched for placement id: 111111111
[InMobi] | 2020.01.26 12:37:34.998 | 1001 |  Started loading Banner ad markup in the webview for placement id: 111111111
[InMobi] | 2020.01.26 12:37:35.563 | 1001 |  Successfully loaded Banner ad markup in the webview for placement id: 111111111
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...