使用 GADBannerView 展开可选值时,我得到了 nil。
我在 FlashViewController.swift 中像这样设置了我的广告横幅..
class FlashViewController: UIViewController {
@IBOutlet weak var bannerView: GADBannerView!
然后在ViewDidLoad中:
func initAdMobBanner() {
bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
bannerView.rootViewController = self
bannerView.load(GADRequest())
}
bannerView 在 Storyboard中有一个到 Root View Controller 的导出,它是 FlashViewController 类。
然后在 TableViewController.swift 中我有我的购买按钮。购买按钮运行:
FlashViewController().HideMyBanner();
函数 HideMyBanner 位于 FlashViewController 中,并将运行以下代码:
if bannerView != nil {
print("bannerview Contains a value!")
bannerView.isHidden = true
} else {
print("bannerview Doesn’t contain a value.")
}
问题是,如果我直接在 FlashViewContorller.swift 中创建一个按钮并运行相同的函数,bannerView 包含一个值并且可以隐藏。如果我从 TableViewController.swift 调用该函数,它会返回 nil(或崩溃)如果我尝试隐藏bannerView...我觉得我在这里错过了一些简单的东西,但已经花了很长时间试图弄清楚...
最佳答案
通过使用此行FlashViewController().HideMyBanner();
,您将创建FlashViewController
的新对象。所以它会崩溃。您需要使用已经创建并加载到内存中的 FlashViewController
对象。
我认为您需要将FlashViewContorller
的引用传递给TableViewController
如果您的 TableViewController
是从 FlashViewContorller
加载的,那么您需要像这样在 TableViewController
中创建引用 FlashViewContorller
。
class TableViewController: UIViewController {
var objFlashViewContorller : FlashViewContorller?
override func viewDidLoad() {
super.viewDidLoad()
//This is the UILabel
}
func purchasebuttonClick() {
objFlashViewContorller?.HideMyBanner();
}
}
在将导航 FlashViewContorller 设置为 TableViewController 时,您需要传递引用。
let tableViewController = self.storyboard!.instantiateViewController(withIdentifier: "TableViewController") as! TableViewController
tableViewController.objFlashViewContorller = self
self.navigationController?.pushViewController(tableViewController, animated: true)
或
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "TableViewController" {
let vc = segue.destinationViewController as! TableViewController
vc.objFlashViewContorller = self
}
关于ios - 从另一个类调用函数时 BannerView Nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43184185/