On Dec 24, 2014, at 7:45 PM, Roland King <[email protected]> wrote:

> 
>> On 25 Dec 2014, at 11:30, N!K <[email protected]> wrote:
>> 
>>> 
>> 
>> Thank you all for explaining what’s going on. I looked up initWithCoder; it 
>> is not suitable for my usage. 
> 
> In what way is initWithCoder: not suitable for your usage?

See 4) below.

> What is the code you had in initWithFrame: which you want called

See 2) below.

> and why can you not put that code into initWithCoder:?

See 3) below.

> Have you even implemented

This is a new area for me, so no, I did not know enough to try this.  
initWithFrame has been working perfectly for me, based on examples in books and 
online. I was blindsided when it suddenly stopped and I had no idea where  or 
how to start debugging. I had never encountered initWithCoder.

I really appreciate all the help that’s offered today; it used to be a very 
hard struggle, working alone, before forums like this one became available.

> a simple initWithCoder: method and checked that is the one being called 
> during the NIB loading by the way -  before we go any further down this 
> track. 

See 1) below.

> 
> My classes often end up looking something like this with the init code 
> factored out into a separate method called from any of the initializers. 
> 
> -(void)My_Class_Internal_Init
> {
>       .. init code ..
> }
> 
> -(id)init
> {
>       self = [ super init ];
>       if( self )
>               [ self My_Class_Internal_Init ];
> 
>       return self;
> }
> 
> -(id)initWithCoder:(NSCoder*)coder
> {
>       self = [ super initWithCoder:coder ];
> 
>       if( self )
>               [ self My_Class_Internal_Init ];
> 
>       return self;
> }
> 
> -(id)initWithFrame: … // etc etc 

 
1)  I added:

-(id)init
{
    self = [ super init ];
    if( self ){
         NSLog(@"\n\n init");   }
    return self;
}

-(id)initWithCoder:(NSCoder*)coder
{
    self = [ super initWithCoder:coder ];
    
    if( self )
     NSLog(@"\n\n initWithCoder");
    return self;
}

Only initWithCoder: is reached; NSLog outputs from there and a breakpoint stops 
 there.

init and initWithFrame: are not reached. No NSLog outputs. No breakpoint stops 
there.

—This raises  a new question: Why isn’t ’init’  reached at all?—


2) InitWithFrame: is unremarkable. For brevity, it contains:

        _path = [[NSBezierPath alloc] init];            
        . . . generate random lines . . .               
        [_path closePath];
        initialize a variable

I will gladly supply the whole thing if anyone wants to look at it.


3) Next I tried initWithCoder: by simple substitution, without knowing what I 
was doing. 

        -(id)initWithCoder:(NSCoder*)coder{
        self = [ super initWithCoder:coder ];
        //- (id)initWithFrame:(NSRect)frame {
        //    self = [super initWithFrame:frame];
  
It worked! But this is not the way I want to program. I need to know why 
initWithFrame stopped working, how to use initWithCoder:  correctly, and what 
potential pitfalls are out there. There may be more than this one:
WANNABEGEEK:“ Identity Inspector - User Defined Runtime Attributes
In your implementation class you cannot use initWithCoder: otherwise your 
key-value path setting will not be picked up. You will have to do all your 
implementation within awakeFromNib.”
Clearly I have some studying to pursue, after this fine start you have given me.

4) Apparently initWith Coder: is suitable. It worked. But I don’t yet know why. 
I don’t even know what the “coder" argument refers to, or what it should be.
In looking up initWith Coder: I found it described in Stack Overflow as
The NSCoder class is used to archive/unarchive (marshal/unmarshal, 
serialize/deserialize) of objects.

This is a method to write objects on streams (like files, sockets) and being 
able to retrieve them later or in a different place.

I would suggest you to read Archiving

Since I didn’t plan to do any archiving at this point, I rejected it. Thanks 
for redirecting me.

Nick

 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/xcode-users/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to