インタースティシャル広告を使ったことはないのですが、
Swift
1let vc = storyboard!.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
2vc.defaultTime = times
の位置を調整してみてはいかがですか?
interstitial.present(fromRootViewController: self)の後に書いてみるとか
また、times.check = self.zeroOverCheck.isOnが離れているのも気になります。
ちなみに、インタースティシャル広告にはclosure的な関数の終わりや、
表示終了結果を得る方法は用意されていないのですか?
closure:
https://qiita.com/narukun/items/b1b6ec856aee42767694
関係のないことですが、引数で受け取ったものを利用して何かを行わず、
引数自体に他のメンバ変数を代入しているのは変な気がしますが、、、
googleのサンプルをみてみましたが、
https://github.com/googleads/googleads-mobile-ios-examples/blob/master/Swift/admob/InterstitialExample/InterstitialExample/ViewController.swift
closureなどで終了を取得する必要はないみたいですね。
単純に直列処理されているように見えますよ。
なので、以下のように修正すればいいのではないでしょうか?
Swift
1private func next(times:DefaultTime) {
2 if interstitial.isReady {
3 interstitial.present(fromRootViewController: self)
4 } else {
5 print("Ad wasn't ready")
6 }
7 // 設定値を追加
8 times.check = self.zeroOverCheck.isOn
9 // 画面遷移
10 let vc = storyboard!.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
11 vc.defaultTime = times
12 self.present(vc, animated: true, completion: nil)
13}
広告が準備できていない時、画面遷移できないと、
ユーザーはその時点で止まってしまって、バグとなってしまいますし。
9/25 追記
うーん、難しいですね。
インタースティシャル広告を自分が使ってたら、実機で試してお答えできるのですが、、、
nextを呼び出す部分でどうなっているのかわかりませんが、
print()を代入し、実際に渡している値、順序を確認することですかね。
Swift
1private func next(times:DefaultTime) {
2 times.check = true // <-これを適宜、各printの前に移動する。
3 print("1:", times)
4 if interstitial.isReady {
5 print("2-1:", times)
6 interstitial.present(fromRootViewController: self)
7 print("2-2:", times)
8 } else {
9 print("3-1:" times)
10 print("Ad wasn't ready")
11 }
12 print("4:", times)
13 // 設定値を追加
14 // times.check = self.zeroOverCheck.isOn ここは一旦コメントアウト
15 // 画面遷移
16 let vc = storyboard!.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
17 vc.defaultTime = times
18 print("5:", times)
19 self.present(vc, animated: true, completion: nil)
20 print("6:", times)
21}
まず、上記を試してみて、各printの前で値を変え、
期待の動きをする箇所を探すのがいいと思います。
もし、しないようなら、、、実装方法を変える必要があるということだと思います。
それこそ、closureを使うとか、GCDを使うかとか、、、
ちなみに、DefaultTimeの構造がわかったので、余計なことですが、
func next内ではDefaultTimeのcheck(Bool型)のみ変更しているので、
timesはメンバ変数で持っている?ことを前提にすると、
Swift
1private func next(bool: Bool) {
2 // ~~ 省略
3 self.times.check = bool
4 // ~~ 省略
5}
viewを通して保持しておきたいと思いますので、メンバ変数にするのがいいと思います。
もし新たに作るとしたら、func next内で作ればいいと思いますし。
後、timesにすると、複数形なので [DefaultTime] のように複数あるイメージになりますよ。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/24 14:39 編集
2019/09/27 17:20