2016-08-10 14 views
0

Amazon SNSからiOSアプリケーションへプッシュ通知をswift verで送信しています。 3.プッシュ通知が到着すると、アプリケーションはthis SOスレッドごとにデバイスの2番目のタブバー項目に切り替わります。 MyGlobalVariablesはAppDelegate.swiftで更新され、viewcontrollerで読み込まれる構造体です。タブバービューコントロールのテキストラベルを更新

AppDelegate.swift

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    if let aps = userInfo["aps"] as? NSDictionary { 
     if let alert = aps["alert"] as? NSDictionary { 
      if let title = alert["title"] as? String { 
       MyGlobalVariables.pushTitle = title 
      } 
      if let body = alert["body"] as? String { 
       MyGlobalVariables.pushBody = body 
      } 
     } 
    } 
    if self.window!.rootViewController as? UITabBarController != nil { 
     let tabbarController = self.window!.rootViewController as! UITabBarController 
     tabbarController.selectedIndex = 1 
    } 
} 

はSecondViewController.swiftのテキストがviewWillAppearに更新()であり、すべては正常です。私はテキストラベルを離れて、バック移動することなく更新されることしたいのですが、このタブにいる間、別のタイトルで新しいプッシュ通知が送信されている場合は

override func viewWillAppear(_ animated: Bool) { 
    pushTitleLabel?.text = MyGlobalVariables.pushTitle 
} 

これをAppDelegate.swiftに追加して、テキストラベルを更新しようとしました。

let sVC = SecondViewController() 
if let title = alert["title"] as? String { 
    MyGlobalVariables.pushTitle = title 
    sVC.updateLabel(t: title) 
} 

そしてSecondViewController.swift

func updateLabel(t: String) { 
    self.pushTitleLabel?.text = t 
} 

でこの機能を持っている。しかし、私はまだviewWillAppear()は、の世話をするテキストの更新を、持って再び離れタブから、バックナビゲートする必要があります。

答えて

1

let sVC = SecondViewController()は、SecondViewController新しいインスタンスを作成し、既存のものへの参照ではありません。あなたは代わりにtabBarControllerのviewControllersプロパティを使用して参照を取得する必要があります:あなたは、その後updateLabelメソッドを呼び出すことができます

let sVC = tabbarController.viewControllers[1] as! SecondViewController 

+0

ありがとう、作品! :-) Xcodeが追加されましたか? ViewController、すなわち、 viewControllers?[1]。 – kometen

関連する問題