2016-12-02 26 views
1

私は、通知の投稿をオブザーバに受信させるのに何時間も努力していますが、試行するたびに失敗しています。私は、ビューアーを自分のルートビューコントローラーに入れて、タブコントローラーを組み込み、タブコントローラーの1つにポストを送信してもらうようにしましたが、役に立たないようにしました。私の人生のために、これを理解することはできませんし、通知がとても面白いかもしれないので、私は本当に好きです!ここでNotificationCenterのオブザーバは投稿を受信して​​いません

は私のコードです:

のViewController

let myNotification = Notification.Name(rawValue:"categoryChange") 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let nc = NotificationCenter.default 
    nc.addObserver(forName:myNotification, object:"test", queue:nil, using:test) 
} 

func test(notification:Notification) -> Void { 
    print("Yo") 
} 

そして、ここで私のDashboardControllerです:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let myNotification = Notification.Name(rawValue:"categoryChange") 
    let nc = NotificationCenter.default 
    nc.post(name:myNotification, 
      object: nil, 
      userInfo:["message":"Hello there!"]) 
} 
私はINITにオブザーバーを入れて試してみました

viewDidLoad、およびviewDidAppear投稿はにあります、私はその逆を行った。これまでに何も働いていなかったので、理由を理解できません。

事前にお手伝いいただける方に感謝します。

+0

Swift 3.0でXcode 8をテストしていますか? –

+0

あなたがオブザーバーを追加する前にあなたが通知をポストしているかどうかをチェックするだけですか? –

+0

@RamkrishnaSharmaええ、私はSwift 3.0でXcode 8でテストしています。 – Nick

答えて

1

あなたの問題は、あなたがNotificationCenterにオブザーバを追加するときにobjectパラメータで(Stringとして)testを渡しています。 (マニュアルより)

オブジェクト:

通知観察者が受信したいオブジェクト。つまり、この送信者によって送信された通知のみがオブザーバに配信されます。

nilを渡すと、通知センターは通知の送信者を使用してオブザーバに配信するかどうかを決定しません。

だから、単にobjectnilへの意志はあなたのために働く設定し、あなたがそのobjectの助けを借りて、通知を掲示していないので、あなたの通知が呼び出さ取得されていない理由です。

nc.addObserver(forName:myNotification, object:nil, queue:nil, using:test) 
+0

これは私のために働いた!私はそれがとてもシンプルなものだとは信じられません。それは常にそうです!どうもありがとうございます! – Nick

+0

もし彼が投稿の 'オブジェクト 'に' 'test" 'を置くと、彼は通知を受け取りますか?あなたはself' 'のように、参照型のオブジェクトを使用する必要があり、そのため' STRING'と –

+0

@Nickようこそメイト:) –

1

私のプロジェクトで動作します。

ポスト通知

let dic: [String:AnyObject] = ["news_id": 1 as AnyObject,"language_id" : 2 as AnyObject] 
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "NotificationKeyIndentifier"), object: dic) 

通知オブザーバー

  override func viewDidLoad() { 
       super.viewDidLoad() 
       NotificationCenter.default.addObserver(self, selector: #selector(self.handlePushNotification(notification:)), name: NSNotification.Name(rawValue: "NotificationKeyIndentifier"), object: nil) 
      } 
     func handlePushNotification(notification: NSNotification){ 

      if let dic = notification.object as? [String: AnyObject]{ 

       if let language_id = dic["language_id"] as? Int{ 

        if let news_id = dic["news_id"] as? Int{ 
         print(language_id) 
         print(news_id) 
        } 
       } 
      } 
     } 
+0

答えはNiravと同じです。彼らは一般的に同じことを成し遂げているので、私は2つの答えを受け入れることができればいいと思う。彼はそれがなぜ機能していなかったのかを説明します。私はあなたが必要とするソリューションを実装する方法を説明します。 – Nick

関連する問題