0

ユーザーがウィンドウ内のボタンを押したときにNSNotificationを自分自身に送信する動作中のアプリがあります(PyObjCを使用したXcode):

from Foundation import *
from AppKit import *
import objc

class SpeakAppDelegate(NSObject):
    def applicationDidFinishLaunching_(self, sender):
        NSLog("Application really did finish launching.")
        nc = NSNotificationCenter.defaultCenter()
        nc.addObserver_selector_name_object_(
            self, "mycallback:", 'love_note', None)
            #self, "mycallback:", None, None)

    @objc.signature('v@0:@8')
    def mycallback_(self,note):
        print 'note'
        print note.description()

    @objc.IBAction
    def button_(self,sender):
        print sender, 'button'
        nc = NSNotificationCenter.defaultCenter()
        nc.postNotificationName_object_userInfo_(
            'love_note', None, {'path':'xyz'})

(詳細:署名はおそらく正確には正しくありませんが、機能します)。

実行したままにします。次に、別のアプリケーションからこのアプリに同じ通知を送信する方法を理解したいと思います。次に例を示します。

// gcc tell.m -o test -framework Foundation
#import <Foundation/Foundation.h>

int main() {
    NSNotificationCenter *nc;
    nc = [NSNotificationCenter defaultCenter];
    [nc postNotificationName:@"love_note"
                      object:nil
                    userInfo:nil ];
    return 0;
}

最初のアプリでその行のコメントを外すと、他にもたくさんの通知が届きますが、それらはすべて私のアプリに関連するイベントからのものです。外からは何も聞こえません。プロセス間で通知を送信するにはどうすればよいですか?そして、コマンドラインから通知を送信する方法はありますか?ありがとう。

更新:上記のNSDistributedNotificationCenterに置き換えるだけで、例が機能します。

4

1 に答える 1

3

NSNotificationCenter を使用して 2 つのアプリ間で通信を行う方法があるとは思えません。以前に使用したことはありませんが、2 つのアプリの通信は分散オブジェクトの仕事だと思います。

Appleのドキュメントから:

各プロセスには、NSNotificationCenter +defaultCenter クラス メソッドでアクセスするデフォルトの通知センターがあります。この通知センターは、単一のプロセス内で通知を処理します。同じマシン上のプロセス間の通信には、分散通知センターを使用します (「NSDistributedNotificationCenter」を参照)。

編集

NSDistributedNotificationCenterは、分散オブジェクトに深く入り込むことなく、探していることを行うこともできるようです。

于 2011-01-26T21:11:54.753 に答える