• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSWindowController and designated initializer rules
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSWindowController and designated initializer rules


  • Subject: Re: NSWindowController and designated initializer rules
  • From: Roland King <email@hidden>
  • Date: Wed, 25 Jun 2014 20:05:24 +0800

On 24 Jun, 2014, at 11:36 pm, Quincey Morris <email@hidden> wrote:

> On Jun 24, 2014, at 07:55 , Sean McBride <email@hidden> wrote:
>
>> I guess it's omission could be a bug, but assuming not, Sketch gets a compiler warning if you tag its own designated initializer (init) with NS_DESIGNATED_INITIALIZER, since it doesn't call one of super's designated initializers.
>
> It doesn’t look like a bug per se, since the old NSWindowController pattern is grandfathered into the Swift world. However, tagging a subclass ‘init’ as designated will break it.
>
> I believe you can solve it if you implement ‘initWithWindow:’ as a designated initializer in the subclass too (just calling super). In that case, your subclass will inherit ‘initWithWindowNibName:’ as a convenience initializer, so it can be called by your subclass ‘init’ — though I would assume only as ‘self initWithWindowNibName:’, not as ‘super initWithWindowNibName:’.
>

I had a go at this in a playground.

If you just inherit and make no initializers, you're fine (obviously).

if you write your own designated initializer (ie no 'convenience') keyword, you must call one of the superclasses designated initializers using super.init( .. )  but you don't need to implement/override either of the initWithWindow: or initWithCoder:  methods as your initializer can call the superclass one

If you write your own convenience initializer then you must, first, implement at least one designated initializer in your class, just overriding initWithWindow: and calling super is enough for that or writing your own designated initializer which calls one of the superclass ones works too.

>> I was trying not to mention 10.10 due to any NDA (though Apple seems more lax about it recently)
>
> Nothing I said was under NDA, since all the information came from the Swift book and the WWDC videos, which are not under NDA this year. In fact, I haven’t downloaded 10.10 or Xcode 6 yet. Since the answer to your question isn’t under NDA, I think we can assume the question was legal too. :)
>
>

My reading of the NDA this year is it's been relaxed to allow the developer community to ask questions, try things out and learn from each other. I'm sure you can break it, but I didn't feel identifying what the two designated initializers were in NSViewController got close to that point.
_______________________________________________

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


References: 
 >NSWindowController and designated initializer rules (From: Sean McBride <email@hidden>)
 >Re: NSWindowController and designated initializer rules (From: Graham Cox <email@hidden>)
 >Re: NSWindowController and designated initializer rules (From: Quincey Morris <email@hidden>)
 >Re: NSWindowController and designated initializer rules (From: Sean McBride <email@hidden>)
 >Re: NSWindowController and designated initializer rules (From: Quincey Morris <email@hidden>)

  • Prev by Date: Trouble with setWidthTracksTextView YES
  • Next by Date: Offsetting content of NSTable/NSOutlineView
  • Previous by thread: Re: NSWindowController and designated initializer rules
  • Next by thread: Animating UICollectionViewCell selection
  • Index(es):
    • Date
    • Thread