I'm writing a document-based app in Swift, with a custom view controller class, and thus had to implement my own version of makeWindowControllers. However, for some reason the call to self.addWindowControllers does nothing at all. I tried stepping into it in the debugger, but that just stepped over the line.
I'm not sure if the bug is in my code or Apple's - I haven't seen any other
users having this problem so I assume it is me.
My document class contains the following (relevant) code:
var additionalWindowController: NSWindowController! /* C */
override func makeWindowControllers() {
let wc = MessageReadingViewController(windowNibName:
"MessageReadingViewController")
wc.document = self
NSLog("have %d windowControllers", self.windowControllers.count) /* A */
self.addWindowController(wc)
NSLog("have %d windowControllers", self.windowControllers.count) /* A */
self.additionalWindowController = wc /* C */
wc.showWindow(self) /* B */
}
Lines A both print "have 0 windowControllers".
My MessageReadingViewController and associated nib seem to be valid - with
lines B and C there the window is shown and (as far as my limited
implementation of the UI can demonstrate) interacts correctly with the document
object.
Without the lines marked C, the window controller, which isn't added to the
windowControllers array, is released when the function ends and is thus
immediately deallocated, closing the window almost instantly.
I haven't tried adding the window controller manually to the windowControllers
array, mainly becuase I haven't found how to access a superclass's ivars
directly in Swift.
For those not familiar with Swift, the above code approximately translated into
Objective-C would be:
@property NSWindowController *additionalWindowController; /* C */
-(void)makeWindowControllers{
MessageReadingViewController *wc = [[MessageReadingViewController alloc]
initWithWindowNibName: @"MessageReadingViewController"];
[wc setDocument:self];
NSLog("have %d windowControllers", self.windowControllers.count); /* A */
[self addWindowController: wc];
NSLog("have %d windowControllers", self.windowControllers.count); /* A */
self.additionalWindowController = wc; /* C */
[wc showWindow:self]; /* B */
}
(I'll crosspost this to the newsgroups comp.sys.mac.programmer.help and
comp.lang.objective-c, and summarise the answers I get in each place to the
other.)
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ Cocoa-dev mailing list ([email protected]) 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
