Re: Cocoa Open GL help
Re: Cocoa Open GL help
- Subject: Re: Cocoa Open GL help
- From: Vince DeMarco <email@hidden>
- Date: Wed, 12 Sep 2001 08:53:36 -0700
On Wednesday, September 12, 2001, at 12:57 am, Raphael Sebbe wrote:
I can't see a case where a class defined by the user could override
-initWithCoder: and that it would be called when the nib is loaded
(except for categories and poseAsClass stuff...). This is because IB does
not encode classes for which it doesn't have access to their
implementation (that is all classes outside of AppKit/Foundation).
Yes this is true. If you select a NSButton and in IB make a subclass of
NSButton called MyButton, when you set the custom class of NSButton to
MyButton, we actually write out (encode) and NSButton, but tell NSArchiver
to swap an instance of NSButton with MyButton.
So if youre MyButton initWithCoder: is expecting some data in the stream
you will get an error and it will not work.
As we were talking about MyOpenGLView, subclass of NSOpenGLView from the
previous posts, that is why I suggested -initWithFrame: for
initialization stuff, which for me is different from setup stuff
(-awakeFromNib).
If you use a CustomView and set the class to MyOpenGLView then
initWithFrame: will get called but if MyOpenGLView is set as a custom
class to the NSOpenGLView that you drag in from the palette, the
initWithFrame: method on MyOpenGLView will never get called.
Am i just confusing everyone or is this explanation helping????
vince
On Tuesday, September 11, 2001, at 11:55 PM, Vince DeMarco wrote:
initWithFrame: will only get called for a CustomView, or in the case of
a customobject we will call init.
In every other case we basically go though the NSCoder stuff and call
initWithCoder: when the object gets read out of the nib file.
But i would not recommend over riding the initWithCoder: (unless you are
really careful). Just add a awakeFromNib method and do the
initialization that you need there. awakeFromNib gets called on all of
the objects in the nib after all of the connections have been made. This
is the safest way of doing this.