Re: Problem when archiving data: [_NSViewGState encodeWithCoder:] unrecognized selector
Re: Problem when archiving data: [_NSViewGState encodeWithCoder:] unrecognized selector
- Subject: Re: Problem when archiving data: [_NSViewGState encodeWithCoder:] unrecognized selector
- From: JArod Wen <email@hidden>
- Date: Sat, 26 Jul 2008 01:16:17 -0400
Hi Ken and Kyle,
I am really sorry for this silly mistake in coding... It seems that
the problem comes just from the decode line in encode method... Sorry
for both of your valuable time!
And for the NSNumber, in fact I used encodeObject: but it thrown a
EXC_BAD_ACCESS to me, then I changed to encodeValueOfObjCType. It
should work for both of these methods in my opinion, so I think it may
have some tricks related to my implementation.
Again, thanks for your kindness on my silly mistake!
On Jul 26, 2008, at 12:52 AM, Ken Ferry wrote:
On Fri, Jul 25, 2008 at 9:33 PM, Ken Ferry <email@hidden> wrote:
[coder encodeValueOfObjCType:@encode(NSNumber *)
at:&magnitude];
This isn't encoding the number object, this is encoding the pointer
to
the number object. When you get it out of the archive, you get the
same pointer as you put in, but that pointer points to some random
bit
of memory in your app, not the number.
I'm sorry, this is wrong. Guess I shouldn't have replied so quickly
on reading this. :-) The object part ought to work.
You do have a line where you try to decode in encodeWithCoder where
you want to encode, and is the points property a C-array of points?
That is going to behave as I suggested. You're just encoding a
pointer, not the points themselves.
What Kyle said also applies.
-Ken
Use [coder encodeObject:] to encode objects.
Also, you're probably also better off using NSKeyedArchiver than
NSArchiver, and using encodePoint:forKey:, encodeObject:forKey:, etc.
The non-keyed archiver is not formally deprecated, but it shouldn't
really be used in new code. Newer Cocoa classes cannot generally be
encoded with the non-keyed archiver, and older classes do not
necessarily encode all of their data when written to a non-keyed
archive. Every time you encode something new in an encodeWithCoder:
method to a non-keyed archiver, it breaks the ability of older
versions of the class to read the archiver.
-Ken
On Fri, Jul 25, 2008 at 6:59 PM, Kyle Sluder
<email@hidden> wrote:
On Fri, Jul 25, 2008 at 6:29 PM, JArod Wen <email@hidden>
wrote:
Since I didn't find any object in the data to be written has the
type of
NSViewGState, I am really confused about this error. Anyone can
give me any
suggestions?
This is usually a case of failing to retain an object you own. If
it
gets deallocated underneath your feet, an object of a different
class
may wind up in the same place in memory, but your old pointers don't
know that. Often, because of the way the compiler has generated
your
code, it's consistently an object of a certain but completely
unrelated class.
--Kyle Sluder
_______________________________________________
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:
@gmail.com
This email sent to email@hidden
---------------
JArod Wen
_______________________________________________
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