• 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
Re: DO doesn't like my objects
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: DO doesn't like my objects


  • Subject: Re: DO doesn't like my objects
  • From: Matt Massicotte <email@hidden>
  • Date: Mon, 25 Nov 2002 20:58:50 -0500

I thought that it might be something like this. I added some NSLogs into my object's implementation of encodeWithCoder: and found that they are not called at all. I find this strange behaviour, but I am going to try your approach.

Matt

On Monday, November 25, 2002, at 04:04 PM, Lindsey Spratt wrote:


On Monday, November 25, 2002, at 01:31 PM, email@hidden wrote:

If I return NSStrings or NSValues, it works absolutely fine. If I
return my own home-brewed objects, no dice. The returned object is
nil, and trying to retain it produces an exception of NSCFArray
addObject:] attempt to insert nil, even though I am not putting it in
an array. The objects that I want to return conform to NSCopying and
NSCoding. I originally thought that was the problem, but it didn't
help at all.

I have been having DO/NSCoding problems something like this myself. I have app-specific objects that inherit directly from NSObject and conform to the NSCoding protocol, but the Distributed Object mechanism doesn't seem to notice. My approach has been to explicitly invoke NSArchive/NSUnarchive. For instance, to have a method return "stuff" (some object conforming to NSCoding) from thread 1 to the caller on thread 2:

In object on thread 1:
- (NSData*) methodReturningDataToOtherThread
{
return [NSArchiver archivedDataWithRootObject:_thread1Stuff];
}

In object on thread 2:
-(Stuff*)getStuffFromOtherThread
{
return [NSUnarchiver unarchiveObjectWithData:[_proxy methodReturningDataToOtherThread]];
}

The variable _proxy holds a ref to the DO proxy object that connects to thread 1.

Stuff is:
@interface Stuff : NSObject <NSCoding> {
int _x;
int _y;

OtherStuff* _otherStuff;
}
- (void)encodeWithCoder:(NSCoder *)encoder;
- (id)initWithCoder:(NSCoder *)coder;
@end

@interface OtherStuff : NSObject <NSCoding> {
int _z;
}
- (void)encodeWithCoder:(NSCoder *)encoder;
- (id)initWithCoder:(NSCoder *)coder;
@end


This approach works fine, but stripping out the NSArchiver/NSUnarchiver material does not.

Seems odd to me, but at least it's working.

Lindsey Spratt
http://homepage.mac.com/lspratt
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

References: 
 >Re: DO doesn't like my objects (From: Lindsey Spratt <email@hidden>)

  • Prev by Date: Re: Drag and Drop weirdness? [Resolved]
  • Next by Date: Help with files??
  • Previous by thread: Re: DO doesn't like my objects
  • Next by thread: Instantly re-display buttons?
  • Index(es):
    • Date
    • Thread