3

LSSharedItemListログイン時に( APIを使用して)起動するためにアプリを登録するアプリの設定を書いています。すべてうまくいき、アプリはチェックボックスのステータスに応じてユーザーのログイン項目での存在を切り替えます。ユーザーが実際に「ログイン項目」からアプリを削除したときの別の問題に取り組みたいと思いますAccounts.prefPane

通知ウォッチャーを使用すると、分散通知センターが通知を送信することがわかります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 の実行

4

1 に答える 1

14

NSConcreteNotification抽象クラスのプライベート サブクラスですNSNotificationNSConcreteNotificationクラスを使用することは想定されていません。クラスが であるかどうかを確認する場合は、次NSNotificationを使用します-isKindOfClass:

if ([sender isKindOfClass:[NSNotification class]]) {
  ...
}
于 2010-01-24T08:14:11.523 に答える