Pregunta

I am sorry if this seems trivial, but I am sure its a reasonable question to ask here. I worked a lot around the NSWindowController class, and it seems the only way to get it to work fully (for my purpose), is by creating a new xib-file along with it.

My question is, would it be somehow feasible to work with MainMenu.xib and the NSWindowController class and an instantiated object controller, to get interaction with the windows' content. So far without xib the only code segments getting executed are within awakeFromNib. The purpose being, I want to save xib-file space, complexity and have it easily integrate with a bigger project. Just fyi this is not a document-based project. Should I choose a different subclass of NSObject other than NSWindowController? Or is it not possible?

The code required to run for the class to be working fully is as follows:

- (void) tableViewSelectionDidChange:(NSNotification *)notification
{
    NSInteger selectedRow = [logsTableView selectedRow];


    if ([directoryList containsObject:[directoryList objectAtIndex:selectedRow]])
    {   
        NSString *logContent = [NSString stringWithContentsOfFile:[directoryList objectAtIndex:selectedRow]
                                                     encoding:NSUTF8StringEncoding
                                                        error:NULL];

        if (logContent != NULL)
        {
            [logsTextView setString:logContent];
        } else
        {
            [logsTextView setString:@"No permission to read log"];
        }
    }
}
¿Fue útil?

Solución

NSWindowController usually wants to create the window it controls, which means you either need to give it a XIB file that contains the window to create or override the various window creation methods to customize the window in code. So it's probably not feasible to use an already-instantiated window from a different XIB with your NSWindowController.

That said, I almost always create a a XIB and an NSWindowController subclass for every window in my apps. Even the preferences window gets its own window controller class. The only exception would be extremely simple windows, but even now I'm struggling to think of a good example.

Your method isn't being called because window controller instance isn't set as the table view's delegate. The typical pattern here is to create your window in a XIB, set your window controller as the custom class of the File's Owner object, and then hook up the table view's delegate and dataSource outlets to File's Owner. This makes your window controller the table view's data source and delegate, and the connections will be established automatically when the XIB is loaded.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top