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 ответа:
Когда вы
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 и делать с ним все, что угодно! Готово!