首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C:如何将对象树传递给远程分布式对象?

Objective-C:如何将对象树传递给远程分布式对象?
EN

Stack Overflow用户
提问于 2011-01-17 22:27:08
回答 1查看 418关注 0票数 0

我有一个名为Node的类,它包含一组参数和一个名为subNodes的NSMutableArray。一个进程创建一个Node对象作为树的根,并使用subNodes数组创建一个大型的节点树。这整个树应该传递给另一个进程,所以我设置了一个NSConnection:

代码语言:javascript
复制
Node *tree;
// ...create Node-Tree...
NSConnection *otherProcess = [NSConnection connectionWithRegisteredName:@"MyApp"
                                           host:nil];
MyObj *remoteObj = (MyObj*) [[otherProcess rootProxy] retain];
[remoteObj setNodeTree:tree];

通信本身是有效的,远程方法'setNodeTree',它期望调用root-Node。但是,树的传输不起作用。我必须为Node类实现一个copyWithZone方法:

代码语言:javascript
复制
-(id)copyWithZone:(NSZone*)zone
{
  Node *nodeCopy = [[[self class] allocWithZone:zone] init];

  [nodeCopy setSize:[self size]];
  [nodeCopy setSubnodes:[[self subnodes] copyWithZone:zone]];

  return nodeCopy;
}

但客户端会终止,并出现以下异常:

代码语言:javascript
复制
*** 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变量,但Node不包含任何变量,也没有使用任何方法来期望或返回BOOL。

EN

回答 1

Stack Overflow用户

发布于 2011-01-17 22:59:22

有两种可能的选择:

整个树的

  • 序列化和反序列化,进程之间的
  • 共享内存。

对于性能和代码可读性,我更喜欢共享内存。参考起点是shmget(2) manual page

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4714254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档