2011-09-30 1 views
2

나는 다음과 같은 코드를 사용하여 내 자신의 통지에 가입하고있어 다음 "anObject를"매개 변수의 경우NULL 객체가있는 NSNotificationCenter.PostNotificationName()이 트리거되지 않습니다 : 버그 또는 설계된대로?

NSNotificationCenter.DefaultCenter.PostNotificationName("BL_UIIdleTimerFired", null); 

그러나, 알림은 정확하게 수신됩니다

NSNotificationCenter.DefaultCenter.AddObserver("BL_UIIdleTimerFired", delegate { 
    Console.WriteLine("BaseFolderViewController: idle timer fired"); 
}); 

알림을 보내려면 PostNotificationName(string sString, object anObject)이 NULL이 아닙니다. 이것은 의도적으로 설계된 것입니까? 객체를 전달해야합니까? 아니면 버그입니까? 특정 개체에 대한 참조를 보내고 싶지 않습니다.

답변

0

이것은 의도적으로 설계된 것입니다. 다른 과부하 (postNotificationName:object:userInfo:)에 대한 Apple 설명서에는 userInfo 매개 변수가 null 일 수 있다고 나와 있습니다. 그래서 다른 두 가지는 null이 될 수 없다고 가정합니다.

"anObject"매개 변수는 알림 (보낸 사람)을 게시하고 NSNotification 클래스의 Object 매개 변수에서 검색 할 수있는 개체입니다.

+0

합리적인 것으로 들립니다. – Krumelur

5

이것은 MonoTouch의 버그입니다. NSNotification은 선택적 사전과 선택적 개체 (일반적으로 보낸 사람이지만 다른 개체 일 수도 있음)를 보낼 수 있도록 작성되었습니다. 이 두 가지 모두 null이 될 수 있지만, MonoTouch에서 객체 매개 변수로 null을 전달하면 Null 포인터 예외가 발생합니다.

Object 매개 변수와 관련하여 iOS 설명서에서 상당히 명확합니다. 알림과 관련된 개체입니다. 이것은 종종이 통지를 게시 한 객체입니다. 그것은 없을 수 있습니다.

public void SendNotification() 
{ 
    NSNotification notification = NSNotification.FromName("AwesomeNotification",new NSObject());    
    NSNotificationCenter.DefaultCenter.PostNotification(notification); 
} 

public void StartListeningForNotification() 
{ 
    NSString name = new NSString("AwesomeNotification"); 
    NSNotificationCenter.DefaultCenter.AddObserver(this,new Selector("AwesomeNotificationReceived:"),name,null);    
} 

public void StopListeningForNotification() 
{ 
    NSNotificationCenter.DefaultCenter.RemoveObserver(this,"AwesomeNotification",null);    
} 

[Export("AwesomeNotificationReceived:")] 
public void AwesomeNotificationReceived(NSNotification n) 
{ 

}