• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
[SOLVED] Re: [Distant Objects] Problem passing custom objects bycopy
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SOLVED] Re: [Distant Objects] Problem passing custom objects bycopy


  • Subject: [SOLVED] Re: [Distant Objects] Problem passing custom objects bycopy
  • From: Oleg Krupnov <email@hidden>
  • Date: Tue, 19 Oct 2010 11:10:08 +0300

I have been able to figure out the problem myself. Here is the
solution for anyone interested.

To diagnose the problem, I tried to send a test object bycopy to the
server, instead of receiving an object bycopy from the server. It
allowed me to locally debug what's happening when
-replacementObjectForPortCoder: is called.

The problem was that I used NSCoder's -[encode***: forKey:], whereas
it turns out that the NSPortCoder does not support it, so an exception
occurred. It only supports encoding C-types
-encodeValueOfObjCType:at:, -encodeValuesOfObjCTypes:...,
-encodeArrayOfObjCType:count:at:, -encodeObject: and their decode*
counterparts. The last encodeObject/decodeObject method processes
object members recursively.

For my application it's okay to not use keys in encoding/decoding, so
it solved the problem.

Oleg.

On Mon, Oct 18, 2010 at 6:46 PM, Oleg Krupnov <email@hidden> wrote:
> Hi,
>
> I have a server and a client processes running on the same machine.
> Per client request, the server does some job and returns the result to
> the client in form of some MyObject.
>
> This is the interface vended by the server:
>
> - (out bycopy MyObject*)doSomeJob;
>
> Despite bycopy, I see in debugger that instead of a copy, a proxy is returned.
>
> Allright, I've read in this list that in order to make work, I also
> need to override -replacementObjectForPortCoder: and I did this:
>
> // in MyObject
> - (id)replacementObjectForPortCoder:(NSPortCoder*)encoder
> {
>        if ([encoder isBycopy])
>        {
>                 NSLog(@"replace by copy!!!")
>                return self;
>        }
>        return [super replacementObjectForPortCoder:encoder];
> }
>
> In this case, I see the "replace by copy!!!" string in the console,
> but then the server process seems to hang and become unresponsive.
> -[MyObject encodeWithCoder:] does not get called.
>
> What am I doing wrong?
>
> Thanks!
>
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

References: 
 >[Distant Objects] Problem passing custom objects bycopy (From: Oleg Krupnov <email@hidden>)

  • Prev by Date: Re: How to Distinguish Between Two TableViews
  • Next by Date: Re: Tracing an iPhone application/framework
  • Previous by thread: [Distant Objects] Problem passing custom objects bycopy
  • Next by thread: AM/PM letter UNICODE issues
  • Index(es):
    • Date
    • Thread