パラメータのセットと subNodes と呼ばれる NSMutableArray を含む Node というクラスがあります。1 つのプロセスが 1 つの Node オブジェクトをツリーのルートとして作成し、subNodes 配列を使用して Node の大きなツリーを作成します。このツリー全体を別のプロセスに渡す必要があるため、NSConnection をセットアップします。
Node *tree;
// ...create Node-Tree...
NSConnection *otherProcess = [NSConnection connectionWithRegisteredName:@"MyApp"
host:nil];
MyObj *remoteObj = (MyObj*) [[otherProcess rootProxy] retain];
[remoteObj setNodeTree:tree];
通信自体は機能し、ルート ノードが呼び出されることを期待するリモート メソッド 'setNodeTree' が呼び出されます。ただし、ツリーの転送は機能しません。Node クラスの copyWithZone メソッドを実装する必要がありました。
-(id)copyWithZone:(NSZone*)zone
{
Node *nodeCopy = [[[self class] allocWithZone:zone] init];
[nodeCopy setSize:[self size]];
[nodeCopy setSubnodes:[[self subnodes] copyWithZone:zone]];
return nodeCopy;
}
ただし、クライアントは次の例外で終了します。
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: '[NOTE: this exception originated in the server.]
Cannot create BOOL from object <Node: 0x10018f640> of class NSDistantObject'
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff81f687b4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff823a80f3 objc_exception_throw + 45
2 Foundation 0x00007fff8831e0c3 -[NSConnection sendInvocation:internal:] + 4304
3 CoreFoundation 0x00007fff81f3a98c ___forwarding___ + 860
4 CoreFoundation 0x00007fff81f36a68 _CF_forwarding_prep_0 + 232
5 MyProgram 0x00000001000015d5 main + 260
6 MyProgram 0x0000000100000fa8 start + 52
7 ??? 0x0000000000000002 0x0 + 2
)
terminate called after throwing an instance of 'NSException'
ここで何がうまくいかなかったのでしょうか?どうやら BOOL 変数がどこかで予期されているようですが、ノードには何も含まれておらず、BOOL を予期または返すメソッドが使用されていません。