用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在故事板中有一个出口到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 ...我觉得我在这里错过了一些简单的东西,但已经花了很长时间试图找出它......
答案 0 :(得分:0)
使用此行FlashViewController().HideMyBanner();
即可创建FlashViewController
的新对象。所以它会崩溃。你需要使用已经创建并加载到内存中的FlashViewController
对象。
我认为您需要将FlashViewContorller
的引用传递给TableViewController
如果您TableViewController
的加载时间比FlashViewContorller
FlashViewContorller
加载TableViewController
,则需要class TableViewController: UIViewController {
var objFlashViewContorller : FlashViewContorller?
override func viewDidLoad() {
super.viewDidLoad()
//This is the UILabel
}
func purchasebuttonClick() {
objFlashViewContorller?.HideMyBanner();
}
}
加载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
}
设置导航FlashViewContorller到TableViewController时需要传递参考。
class Count
{
public static int sum(int add1, int add2)
{
int result = add1 + add2;
return result;
}
}
class Program
{
static void Main(String[] args)
{
Console.WriteLine("Adding: \nPlease enter the first number");
int num1 = int.Parse(Console.ReadLine());
Console.WriteLine("Please enter the second number");
int num2 = int.Parse(Console.ReadLine());
Count add = new Count();
int total = add.sum(num1, num2);
Console.WriteLine("The sum is {0}.", total);
Console.ReadLine();
}
}
或强>
{{1}}
答案 1 :(得分:0)
请勿使用FlashViewController().HideMyBanner();
我认为你需要在TableViewController.swift中使用它 - >我的购买按钮方法。
self.revealViewController.frontViewController.HideMyBanner()
答案 2 :(得分:0)
我使用通知最终解决了这个问题......控制器2发出购买通知,并且Controller 1观察并等待此通知,然后负责将控制台1中的横幅隐藏起来。
https://blog.bobthedeveloper.io/pass-data-with-nsnotification-in-swift-3-73743723c84b