2017-09-16 4 views
0

こんにちは は、私はこのような他のビューコントローラに通知を送信したいです:通知センターは、iOSのスウィフトにdidSelectRowAtで働いていない3

しかし、動作しません。主な問題は、didSelectRowメソッドで呼び出しメソッドを設定したときに発生します。

この問題を解決するのを手伝ってください。

+0

通知センターオブザーバを追加する場所は、あなたのクラスがオブザーバを追加する場所では初期化されていないと思います。 – Hitesh

+0

@Hitesh最初にinitを実行し、それを別のvcで呼び出します。 –

+0

'thisistestHandler'の初期化が間違っています。@vadianの回答 – Hitesh

答えて

0

あなたのオブザーバーのセレクターが間違っています。あなたの通知オブザーバメソッドはパラメータを取りますが、セレクタパラメータにそのメソッドのオブザーバを追加している間は指定していません。プロジェクトがコンパイルされているということは、同じ名前でパラメータを持たない別のメソッドが必要であることを意味します。

変更するには:

override func viewDidLoad() { 
    ............ 
    ............ 

    NotificationCenter.default.addObserver(self,selector: #selector(thisistestHandler(notification:)),name: NSNotification.Name(rawValue:"thisIsTestNotif"),object: nil) 
} 

@objc func thisistestHandler(notification:Notification) { 

} 
+0

テストしましたが動作しません。 –

+0

しかし、viewDidLoadの呼び出しメソッドを設定すると正しく動作します。 –

+0

@reza_khalafi:別のビューから通知を送るとき、オブザーバとして登録されているビューコントローラはメモリにありますか? –

0

最も信頼性 - 互換性にObjC - スウィフト3構文が

#selector(thisistestHandler(_:)) 

ともちろん

func thisistestHandler(_ notification: Notification) {... 

通知の受信機である持っている必要があります既に読み込まれています。


注:

コントローラは、プロトコル/デリゲートまたはクロージャーコールバック次に関連している場合は、より良い選択です。 Notificationは、複数の受信者が存在したり、送信者と受信者が関連していない場合にのみ使用されることになっています。

0

代わりのviewDidLoad

viewWillAppear

NotificationCenter.default.addObserver(self,selector: #selector(thisistestHandler),name: NSNotification.Name(rawValue:"thisIsTestNotif"),object: nil) 

を追加し、viewWillDisappearでオブザーバを削除します。

あなたにはうってつけかもしれませんが、うまくいくかもしれません。

関連する問題