Re: replacing self in initWithCoder method?
Re: replacing self in initWithCoder method?
- Subject: Re: replacing self in initWithCoder method?
- From: Dan Wood <email@hidden>
- Date: Tue, 03 Dec 2002 12:22:14 -0800
Hmm, I've tried to create my own object and just copy over the
attributes of the object that was decoded into a new object. But
further up the calling chain, things "hang" in nib-decoding code that I
don't know what is doing. Any other ideas?
Code snippet so far is:
- (id)initWithCoder:(NSCoder *)decoder
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL beTextField = [defaults boolForKey:@"UsePlainTextField"];
if (beTextField)
{
self = [super initWithCoder:decoder]; // first decode the original
combo box object
NSTextField *newField = [[NSTextField alloc] initWithFrame:[self
frame]];
[newField setAllowsEditingTextAttributes:[self
allowsEditingTextAttributes]];
[newField setBackgroundColor:[self backgroundColor]];
[newField setBezelStyle:[self bezelStyle]];
[newField setBezeled:[self isBezeled]];
[newField setBordered:[self isBordered]];
[newField setDelegate:[self delegate]];
[newField setDrawsBackground:[self drawsBackground]];
[newField setEditable:[self isEditable]];
[newField setImportsGraphics:[self importsGraphics]];
[newField setSelectable:[self isSelectable]];
[newField setTextColor:[self textColor]];
[self autorelease]; // no longer needing the "old" self
self = (id)newField; // replace self with the object we created
}
else
{
if (self = [super initWithCoder:decoder])
{
... subclass-specific encoding
}
}
return self;
}
FROM: Jirtme Laurens
DATE: 2002-11-28 09:27
Le mercredi, 27 nov 2002, ` 21:54 Europe/Zurich, Dan Wood a icrit :
> I have some UI elements in a nib that are subclasses of NSComboBox --
> however, I would like to, via a preference, just show them as a plain
> NSTextField instead. (NSTextField happens to be a subclass of
> NSComboBox.)
>
> I'm thinking that maybe I can fake this in the initWithCoder: method
> of MyComboBox, so that if the preference is set to use a plain
> NSTextField instead, I replace self with an NSTextField.
>
> However, it's not working (I end up seeing a combo box in the
> interface, though it doesn't respond to the popup button. And, I get
> this message at runtime when the NSTextField is built:
>
> NSView not correctly initialized. Did you forget to call super?
>
> Am I doing this wrong? Any suggestions on making this work?
>
> Dan
>
>
As far as I understand, the format of the data in the coder is severely
tied to the class that created the archive. So,
you should always call -[NSComboBox initWithCoder:]. Once the combo box
is inited, you can decide to use it as is or just make a NSTextField
poor man clone.
BTW, this is weird design: NSComboBox is a subclass of NSTextField, not
the converse
--
Dan Wood
Karelia Software, LLC
email@hidden
http://www.karelia.com/
Watson for Mac OS X:
http://www.karelia.com/watson/
_______________________________________________
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.