0

スタック オーバーフローに関する考えられる解決策をすべて読みましたが、うまくいくものはありません。

私のコードは

func foo() {
    NotificationCenter.default.addObserver(self, selector: #selector(fetchedUser(notification:)) , name: NSNotification.Name.init("dbReady"), object: nil)
    loggedUser.fetchUserByUID(id: current.uid)    
    return true
}

func fetchedUser(notification:NSNotification){
    let info = notification.object as! [String : AnyObject]
    print(info)
}

そして別のクラスで私は:

 NotificationCenter.default.post(name: NSNotification.Name.init("dbReady"), object: dictionary)

セレクターのすべての構文が機能しない

私は試した:

1. fetchedUser
2. fetchedUser:
3. fetchedUser(notification:)
4. "fetchedUser:"

そしておそらく他の10のオプション。誰でも私を助けることができますか?

4

5 に答える 5

3

Swift 3 では、(システム) 通知には次の標準署名があります。

func notifFunction(_ notification: Notification)

だからあなたの機能は

func fetchedUser(_ notification: Notification){

そして、対応するセレクターは

#selector(fetchedUser(_:))

便宜上、次の拡張機能を使用できますNotification.Name

extension Notification.Name {
  static let databaseReady = NSNotification.Name("dbReady")
}

それからあなたは書くことができます

NotificationCenter.default.addObserver(self, selector: #selector(fetchedUser(_:)) , name: .databaseReady, object: nil)

NotificationCenter.default.post(name: .databaseReady, object: dictionary)
于 2016-12-01T10:27:55.557 に答える
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)

通知オブザーバー

観察したい必要なクラスに次のコードを追加します。

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)
              }
          }
      }
 }

それがあなたを助けることを願っています。これに関して問題がある場合は、お気軽に質問してください。

于 2016-12-01T10:36:55.627 に答える
0

これを試すことができます:

NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.fetchedUser), name: notificationName, object: nil)
于 2016-12-01T10:32:36.803 に答える
0
class Observer {

    init() {
        let name = NSNotification.Name("TestNotification")
        NotificationCenter.default.addObserver(self, selector: #selector(notificationDidTrigger), name: name, object: nil)
    }

    @objc func notificationDidTrigger(notification: Notification) {
        print("Notification triggered ", notification.userInfo)
    }
}


let obj = Observer()

let name = NSNotification.Name("TestNotification")
var notification = Notification(name: name, object: nil)
notification.userInfo =  ["Name": "My notification"]
NotificationCenter.default.post(notification)
于 2016-12-01T10:36:04.010 に答える
0

私のエラーは、「fetchedUserWithNotification:」という名前のセレクターが存在しなかったことです。新しいクラスを書き直し、そのすべてのコンテンツをコピーして貼り付けることで、問題を解決しました。多分それはXcodeのバグでした(IMHOの最後のバージョンはそれで十分です)

于 2016-12-01T11:17:13.693 に答える