How to correctly implement a NSWindowController subclass with xib-file

I am trying to implement a NSWindowController subclass with new xib-file, I read up in lots of books, and researched on StackOverflow, but none of the steps provided made my window show, nor did the subclass code get executed. The new xib-file has its File's Owner set to "LogNavigatorController" and connections to the window and its contents have been made.

My AppDelegate.h:

#import <Cocoa/Cocoa.h>

@class LogNavigatorWindowController;

@interface AppDelegate : NSObject <NSApplicationDelegate>
{
    LogNavigatorWindowController *logsWindowController;
}

@end

My AppDelegate.m:

#import "AppDelegate.h"
#import "LogNavigatorWindowController.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application

    logsWindowController = [[LogNavigatorWindowController alloc] initWithWindowNibName:@"LogNavigatorWindowController"];
    [logsWindowController showWindow:self];
}

@end

My LogNavigatorWindowController.h:

#import <Cocoa/Cocoa.h>

@interface LogNavigatorWindowController : NSWindowController
{
    NSArray *directoryList1;
    NSArray *directoryList2;
    NSMutableArray *directoryList;
    NSMutableArray *filePaths1;
    NSMutableArray *filePaths2;
}

@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTableView *logsTableView;
@property (unsafe_unretained) IBOutlet NSTextView *logsTextView;
@property (assign) IBOutlet NSArrayController *LogListController;
@property (retain) NSMutableArray *logsArray;

- (void) myDirectoryLogFunction;

@end

My LogNavigatorController.m:

#import "LogNavigatorWindowController.h"

@interface LogNavigatorWindowController ()

@end

@implementation LogNavigatorWindowController

@synthesize logsTableView;
@synthesize logsTextView;
@synthesize window;

- (id)init
{
    self = [super initWithWindowNibName:@"LogNavigatorWindowController"];
    [self loadWindow];
    [self showWindow:@"Log Navigator"];
    [self.window makeKeyAndOrderFront:nil];

    if (self)
    {
        // Initialization code here.
        [self myDirectoryLogFunction];
    }

    return self;
}

- (void)windowDidLoad
{
    [super windowDidLoad];

    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}

- (void) myDirectoryLogFunction
{
    NSLog(@"Code execution test successful");
}

@end

Answers


You don't need to create the window property since it is already available for NSWindowController subclasses. Maybe that causes the problem.

Also your init method contains a lot of code that doesn't belong there. Remove

[self loadWindow];
[self showWindow:@"Log Navigator"];
[self.window makeKeyAndOrderFront:nil];

as well as replace

self = [super initWithWindowNibName:@"LogNavigatorWindowController"];

with

self = [super init];

You may want to remove the init method at all, since you don't need it in your case.

and move

[self myDirectoryLogFunction];

to the windowDidLoad method.

Also always check that the code for instantiating the window controller (in your case from the app delegates didFinishLaunching: ) is called. Sometimes it helps to create a new project and test there, if you may have changed too much within the original project and by accident removed delegate connections or similar.


Need Your Help

problem in using ESAPI library for XSS prevention

security xss owasp

I am trying to prevent XSS attacks in my website for this i am using OWASP ESAPI library .I added jar for this library in classpath and I am getting following error .

How to chroot Django

python django security chroot jail

Can one run Django in a chroot? Notably, what's necessary in order to set up (for example) /var/www as a chroot'd directory and then have Django run in that chroot'd directory?