Accessing NSKeyedArchiver's archivedDataWithRootObject by name

2008-12-09 Thread Jim Turner
I have a situation where I'm archiving an array of objects via
NSKeyedArchiver's archivedDataWithRootObject: and later needing to set
a delegate on the NSKeyedUnarchiver that decodes it.  The
documentation is a bit unclear on how one starts the unarchive process
when a NSKeyedUnarchiver is created on an archive where you don't
know, for certain, the keys it contains.

So my question... is this legitimate?

NSKeyedUnarchiver *_keyedUnarchiver = [[[NSKeyedUnarchiver alloc]
initForReadingWithData:archivedData] autorelease];
[_keyedUnarchiver setDelegate:self];
NSMutableArray *archivedArray = [_keyedUnarchiver decodeObjectForKey:@root];
[_keyedUnarchiver finishDecoding];

It works, but I always question things when I hard-code a string for
something.  Will 'root' always be the key that represents the root
object?

If I could do something like [NSKeyedUnarchiver
unarchiveObjectWithData:delegate:], that would be better than perfect.

-- 
Jim
http://nukethemfromorbit.com
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]


Re: Accessing NSKeyedArchiver's archivedDataWithRootObject by name

2008-12-09 Thread Michael Ash
On Tue, Dec 9, 2008 at 1:17 PM, Jim Turner [EMAIL PROTECTED] wrote:
 I have a situation where I'm archiving an array of objects via
 NSKeyedArchiver's archivedDataWithRootObject: and later needing to set
 a delegate on the NSKeyedUnarchiver that decodes it.  The
 documentation is a bit unclear on how one starts the unarchive process
 when a NSKeyedUnarchiver is created on an archive where you don't
 know, for certain, the keys it contains.

 So my question... is this legitimate?

 NSKeyedUnarchiver *_keyedUnarchiver = [[[NSKeyedUnarchiver alloc]
 initForReadingWithData:archivedData] autorelease];
 [_keyedUnarchiver setDelegate:self];
 NSMutableArray *archivedArray = [_keyedUnarchiver decodeObjectForKey:@root];
 [_keyedUnarchiver finishDecoding];

 It works, but I always question things when I hard-code a string for
 something.  Will 'root' always be the key that represents the root
 object?

 If I could do something like [NSKeyedUnarchiver
 unarchiveObjectWithData:delegate:], that would be better than perfect.

This is an interesting question. NSArchiver describes exactly how the
root object stuff works in terms of the rest, but NSKeyedArchiver
doesn't. I would file a bug, at least to get it documented.

However, one of the painful and pleasurable thing about stuff like
NSCoder is that it essentially has to remain forward and backward
compatible for eternity. An NSKeyedArchiver running on 10.7 must
produce an archive which can be read on 10.2. This sort of thing
presumably couldn't be changed without breaking 10.2 or some other
past OS, so uncomfortable as it may be, if it works today it ought to
keep working forever.

Mike
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]