2

あるアプリケーションから別のアプリケーションにオブジェクトを転送する方法はありますか?私はそのようなことを意味します:

// FirstApp:

- (void)someFunction{
myClass *myObj = [[myClass alloc] init]

//do some work...

[self runSecondAppWithObj:myObj];
}

// SecondApp:

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        myClass *obj = //get obj from firstApp
        //do some another work...
    }
    return 0;
}

myClassはそれほど単純ではありません。そのため、NSString->charですべての情報を転送することはできません。また、2番目のアプリの最初のオブジェクトが必要であり、その重複は必要ありません。

私はそれを次のように想像します:最初のアプリは2番目のアプリを起動し、その後最初のアプリは2番目に話します:「ねえ、#adrは変数(ポインター)へのアドレスです、行ってください」。その後、2番目のアプリはそのアドレスで変数(ポインター)を取得します。しかし、私はそれを作る方法がわかりません。

4

1 に答える 1

2

これを行うためにすぐに頭に浮かぶ2つのオプションがあります(最初のオプションを実装することをお勧めします)。

  1. シリアルmyClass化可能にする:ここでの基本的な考え方は、NSCodingプロトコルを実装してから、それをNSKeyedArchiverにシリアル化するために使用することNSDictionaryです。その後、辞書は、plist(XML)などの交換可能な形式に簡単に変換できます。次に、XMLテキストを2番目のアプリケーションに渡し、とを使用してそこで逆シリアル化しNSDictionaryますNSKeyedUnarchiver。アーカイブとシリアル化に関する優れたガイドと例は、Appleの開発者向けドキュメントのCocoaにあります。

  2. プロセス間通信メカニズムを使用してオブジェクトを渡す:これはもう少し複雑で、起動時にオブジェクトを別のアプリに渡すだけでなく、継続的に通信するアプリにはお勧めします。これを行う1つの方法は、分散オブジェクトを使用することです。これにより、プロセス間、または異なる物理マシン間でオブジェクトをローカルであるかのように共有できます(いくつかの制限があります)。たとえば、最初のアプリでオブジェクトを共有するには、次のようにします。

    NSConnection *connection = [[NSConnection connectionWithReceivePort:[NSPort port]] sendPort:nil];
    [connection setRootObject:theObject];
    [connection registerName:@"com.example.whatever"];
    

    そして、2番目のアプリでは、次のように呼び出します。

    id theObject = (id)[NSConnection rootProxyForConnectionWithRegisteredName:@"com.example.whatever" host:nil];
    [theObject someMethod];
    
于 2012-04-25T11:04:31.780 に答える