Xamarin NSNotificatioCenter: как я могу получить передаваемый NSObject?


Я пытаюсь отправить уведомление в представлении из моего приложения в другое, используя NSNotificationCenter. Поэтому в классе назначения я создаю своего наблюдателя следующим образом:

NSNotificationCenter.DefaultCenter.AddObserver ("ChangeLeftSide", delegate {ChangeLeftSide(null);});

И у меня есть свой метод:

public void ChangeLeftSide (UIViewController vc)
{
    Console.WriteLine ("Change left side is being called");
}

Теперь от другого UIViewController я отправляю уведомление следующим образом:

NSNotificationCenter.DefaultCenter.PostNotificationName("ChangeLeftSide", this);

Как я могу получить доступ к контроллеру вида, который передается в моем уведомлении post в моем классе назначения? В iOS это очень прямолинейно, но я, кажется, не могу найти свой путь monotouch (Xamarin)...

2 8

2 ответа:

Когда вы AddObserver, вы хотите сделать это немного по-другому. Попробуйте следующее:

NSNotificationCenter.DefaultCenter.AddObserver ("ChangeLeftSide", ChangeLeftSide);

И объявление вашего ChangeLeftSide метода соответствующим Action<NSNotification> ожидаемым AddObserver - дающим вам фактический NSNotification объект. :

public void ChangeLeftSide(NSNotification notification)
{
    Console.WriteLine("Change left side is being called by " + notification.Object.ToString());
}
Таким образом, когда вы PostNotificationName, вы прикрепляете объект UIViewController к уведомлению, которое можно получить в вашем NSNotification через свойство Object.

Я нашел ответ, вот изменения, которые нужно внести в код, который я разместил в вопросе:

public void ChangeLeftSide (NSNotification notification)
{
    Console.WriteLine ("Change left side is being called");
    NSObject myObject = notification.Object;
    // here you can do whatever operation you need to do on the object
}

И создается наблюдатель:

NSNotificationCenter.DefaultCenter.AddObserver ("ChangeLeftSide", ChangeLeftSide);

Теперь вы можете привести или ввести проверку NSObject и делать с ним все, что угодно! Готово!