public void addObserver(System.Object target, Action<NSNotification> aSelector, string aName, System.Object sender=null){
List<NSNotificationObserver> observers = null;
if (!_name_observers.TryGetValue (aName, out observers)) {
_name_observers[aName] = observers = new List<NSNotificationObserver>();
}
NSNotificationObserver observer = null;
var enumerator = observers.GetEnumerator();
while (enumerator.MoveNext()) {
NSNotificationObserver aObserver = enumerator.Current;
if(aObserver.target == target){
observer = aObserver;
}
}
if (observer == null) {
observer = new NSNotificationObserver ();
observer.target = target;
observer.selectorAndSenders = new List<NSNotificationSelectorAndSender> ();
observers.Add(observer);
} else {
var eu = observer.selectorAndSenders.GetEnumerator();
while (eu.MoveNext()) {
NSNotificationSelectorAndSender selectorAndSender = eu.Current;
NSUtils.Assert(selectorAndSender.selector != aSelector || selectorAndSender.sender != sender,
"NSNotificationDelegate#addObserver : Dont' add observer with same target/method/sender !");
}
}
NSNotificationSelectorAndSender selAndSender = new NSNotificationSelectorAndSender();
selAndSender.selector = aSelector;
selAndSender.sender = sender;
observer.selectorAndSenders.Add (selAndSender);
}