AppSupport
iOSのプライベートフレームワークにはCPDistributedNotificationCenter
、OSXで提供される機能のサブセットをサポートしているように見えるというクラスがありますNSDistributedNotificationCenter
。
このクラスを使用して、バックグラウンドデーモンからの通知を投稿し、他のプロセスの複数のクライアントがこれらの通知を受信して処理できるようにしようとしています。CPDistributedMessagingCenter
またはCFMessagePort
、低レベルのマッハポート、さらにはダーウィンを含む他のオプションがあることを私は理解していますnotify_post
。ただし、デーモンがクライアントの知識を持っていない場合はそれを好みます。また、通知とともにデータを渡すことができるようにしたいnotify_post
ので、これを許可しません。
現在、これは私がデーモンで行っていることです。
CPDistributedNotificationCenter* center;
center = [CPDistributedNotificationCenter centerNamed:@"com.yfrancis.notiftest"];
[center runServer];
[center postNotificationName:@"hello"];
そしてクライアントでは:
CPDistributedNotificationCenter* center;
center = [CPDistributedNotificationCenter centerNamed:@"com.yfrancis.notiftest"];
[center startDeliveringNotificationsToMainThread];
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc addObserver:[Listener new]
selector:@selector(gotNotification:)
name:@"hello"
object:nil];
ここListener
で、は単一のメソッドを実装する単純なクラスですgotNotification:
残念ながら、クライアントは「hello」通知を受信しません。呼び出しのname
引数をに置き換えると、クライアントの通知センターに配信されるすべての通知を確認できますが、「hello」はその1つではありません。addObserver
nil
SpringBoard
との逆アセンブルを見て、コードのインスピレーションを得ましたCPDistributedNotificationCenter
。通知は、のシムとして機能するCPDistributedNotificationCenter
のを介して配信されるように見えます。deliverNotification:userInfo:
NSNotificationCenter
postNotificationName:object:userInfo:
ここで何が欠けていますか?