2016-05-20 9 views
1

私のHomeViewController viewDidLoadメソッドで私は新しい通知を探しているオブザーバを持っています。それが観察されるとSecondTableVCにつながります。 2番目のVCに同じ通知を求めるオブザーバがありますが、2番目のオブザーバは通知を見てメソッドを呼び出していません。私がここで何が不足しているのか説明できる人に事前に感謝しますか? viewDidLoadとsegueメソッドの両方でオブザーバを削除しましたが、修正されません。 SecondTableVC2つのViewControllersのNSNotification addObserver Swift

override func viewDidLoad() { 
     super.viewDidLoad() 

// check for new notification - if there is 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SecondTableVC.newNotif), name: "NotificationActionPressed", object: nil) 
    } 

    func newNotif() { 
     print("new notif") // THIS METHOD IS NOT GETTING CALLED 
    } 
+0

あなたの 'SecondTableVC'は、オブザーバーが通知をスローしたときにメモリに保存されていますか? –

+0

セグメンテーションの後に作成 – richc

+0

こんにちは - どのように私はSecondTableVCをメモリに入れますか? – richc

答えて

1

フィリップからの答えをピギーバックする種類:2番目のビューコントローラがNSNotificationイベントをリッスンすることが絶対に必要な場合は、2番目のビューコントローラをストーリーボードからインスタンス化し、最初のビューコントローラそれが表示される必要があるまで。この場合、第2のビューコントローラは、初期化時に通知イベントに登録する必要があります。

+0

こんにちは - SecondTableVCは画面上に存在し、ViewDidLoadが呼び出されています。どのように私はストーリーボードからそれをインスタンス化し、それがセグの後に必要になるまで、最初のVCによってメモリに保持するのですか? – richc

+0

'SecondTableVC'は、通知が掲示された後に作成されます。それだけでは十分ではありません。あなたがする必要があるのは、2番目のView Controllerを保持するストーリーボードのインスタンスを作成し、 'instantiateViewControllerWithIdentifier(_ :)'を呼び出し、最初のView Controllerでプロパティを作成してそのView Controllerへの参照を保持することです。ビューコントローラを表示する場合は、独立したインスタンスが作成されるため、segueを実行することはできません。参照を保持しているView Controllerを表示する必要があります。 –

+0

上記の編集を試みましたが、2番目のView Controllerを保持するストーリーボードのインスタンスを作成する方法を理解できませんか?とにかく、通知アクションの後にすべてのアプリが起動されます。それは2回する必要があるように聞こえる。 Notificationsは、VC間で簡単にやりとりできる方法だと思っていました。通知が送信されたときに、それらがすべてインスタンス化されていない限り、リッスンできません。ハンプフ。 – richc

0

var childVC: UIViewController! 

override func viewDidLoad() { 
     super.viewDidLoad() 

childVC = self.storyboard?.instantiateViewControllerWithIdentifier("WordListsTableViewController") 

// check for new notification - if there is segue to the SecondTableVC 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(HomeViewController.showChildVC), name: "NotificationActionPressed", object: nil) // Segue works fine. 
     } 

func showChildVC() { 
    self.view.addSubview(childVC.view) 
} 

あなたのセグエはを作成する第2のビューコントローラを引き起こします。 segueが通知によってトリガされた場合、SecondTableVCviewDidLoadは、通知が発生しても発生していません。

第2コントローラは、その時点までに登録されていないだけでなく、実際には存在しないため、通知を受信しません。

+0

こんにちは - SecondTableVCのviewDidLoadが呼び出され、存在しています.... – richc

+0

起こっていることの順序を見るために、いくつかのprintステートメントをコードに入れてください。 segueを起動する通知が間違っているか、通知時に 'SecondTableVC'が存在しません**。 –

関連する問題