Мне нужна помощь в определении проблем в этом коде. Я думаю, что я пытаюсь сделать что-то глупое здесь. Я создаю класс (класс рекламы), который будет загружать рекламу в моем приложении. Я пытаюсь использовать быстрые делегаты, чтобы при успешной загрузке рекламы я мог вызвать функцию в своем основном классе для отображения рекламы. Проблема, с которой я сталкиваюсь, заключается в том, что фактические методы делегата (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