2010-01-24 43 views
2

我正在爲我的應用程序編寫首選項,將其註冊爲在登錄時啓動(使用LSSharedItemList API)。一切正常,我的應用程序在複選框狀態下切換其在用戶登錄項目中的存在。現在我想解決用戶從Accounts.prefPane的「登錄項目」中刪除應用程序時出現的另一個問題。收到NSConcreteNotification,但沒有定義?

使用通知觀察者我看到,分佈式通知中心發送com.apple.loginItemsListDidChnage(介意錯字)通知,因此我用於與相同的選擇(這是IBAction),該通知添加觀察者,在選項窗口(處理複選框其中,實際上,[未]將應用程序從/登錄到登錄項目)。

當我嘗試比較作爲登錄項目切換我的應用程序的操作的發件人類時,會出現此問題。使用[sender description][sender class]我看到NSConcreteNotification類,但只要我嘗試在它做比較 - 碼符說沒有定義這樣的類:

if ([[sender class] isEqualTo:[NSConcreteNotification class]]) { 
    ... 
} 

如果我嘗試發送比較NSNotification - 再流到不屬於該分支。

也許我錯過了關於Mac OS X中分發通知的一些基本知識?

運行Mac OS X 10.6.2

+0

且不說我不認爲'isEqualTo:'可以作爲一個類的方法,所以這應該拋出呢,一事─響應選擇器異常。 (甚至實例版本是用於腳本編寫的。http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Protocols/NSComparisonMethods_Protocol/對於一般目的,您可以使用'isEqual:'。)If測試這是否是完全相同的類是合適的,您可以在這裏使用'=='運算符。 – 2010-01-24 16:22:55

回答

12

NSConcreteNotification是抽象NSNotification類的私有子類。你不應該使用NSConcreteNotification類。如果您想檢查一類是NSNotification,使用-isKindOfClass:

if ([sender isKindOfClass:[NSNotification class]]) { 
    ... 
}