ios - 从另一个类调用函数时 BannerView Nil

标签 ios swift

使用 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/

相关文章:

ios - 使用旧版 Swift 语言版本”(SWIFT_VERSION)不起作用

ios - "Use of unresolved identifier ' Realm '"

ios - 使用xcodebuild构建不同平台

iOS 增加 UITableViewCell 中 UIButton 的触摸区域

ios - 如何在 Swift 中定义闭包数组?

Cordova 中的 Swift 插件导致 EXC_BAD_ACCESS

android - 如何防止 jquery 移动中的默认 ListView 单击?

ios - 我在哪里可以获得 iPhone 2.0 SDK?

ios - 强制裁剪/从裁剪工具打开开始

swift - 按 Ui 标签名称对 TableView 进行排序