AppSupportiOSのプライベートフレームワークには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つではありません。addObservernil
SpringBoardとの逆アセンブルを見て、コードのインスピレーションを得ましたCPDistributedNotificationCenter。通知は、のシムとして機能するCPDistributedNotificationCenterのを介して配信されるように見えます。deliverNotification:userInfo:NSNotificationCenterpostNotificationName:object:userInfo:
ここで何が欠けていますか?