2014-01-30 2 views
2

새 xib 파일로 NSWindowController 서브 클래스를 구현하려고하는데 많은 책을 읽고 StackOverflow에서 연구했지만 제공되는 단계 중 아무 것도 내 창을 만들지 못했습니다. show, subclass 코드가 실행되지 않았다. 새 xib 파일의 File 's Owner가 "LogNavigatorController"로 설정되고 창과 해당 내용에 대한 연결이 설정되었습니다.xib 파일로 NSWindowController 서브 클래스를 올바르게 구현하는 방법

내 AppDelegate.h :

#import <Cocoa/Cocoa.h> 

@class LogNavigatorWindowController; 

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

@end 

내 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 

내 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 

내 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 
+0

'NSWindowController'는 이미'window' "property"를 가지고 있습니다. 그래서 당신 자신이 공급하는 것이 문제입니다. – trojanfoe

+0

감사합니다. @trojanfoe 속성과 구현 코드를 제거했습니다 (합성). 여전히 주사위가 없습니다. –

답변

2

NSWindowController 하위 클래스에서 이미 사용할 수 있으므로 window 속성을 만들 필요가 없습니다. 문제가 원인 일 수 있습니다.

또한 init 메소드에는 거기에 속하지 않는 많은 코드가 들어 있습니다. 당신은 당신의 경우에 당신이 그것을 필요로하지 않기 때문에, 모든 init 메소드를 제거 할 수 있습니다

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

를 제거뿐만 아니라

self = [super init]; 

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

를 교체합니다.

및 windowDidLoad 방법에

[self myDirectoryLogFunction]; 

이동.

또한 항상 (응용 프로그램 대리인 didFinishLaunching :)의 사례에서 창 컨트롤러를 인스턴스화하는 코드가 호출되는지 확인하십시오. 경우에 따라 원본 프로젝트 내에서 너무 많이 변경되어 실수로 제거 된 대리인 연결 또는 유사한 작업을 수행하는 경우 새 프로젝트를 만들고 테스트 할 때 도움이됩니다.

+0

고마워요 @Volker 지금은 다 했는데도 서브 클래스 코드가 아직 실행되지 않아서 창이 열리지 않습니다. –

+0

AppDelegate 클래스와 관련이 있다고 의심됩니다. NSWindowController 하위 클래스를 호출해야하기 때문에 AppDelegate 클래스를 읽고 코드를 그대로 실행하면 실행되지 않습니다. –

+0

AppDelegate의 initWithWindowNibName 호출에서 XIB 이름이 올바른지 확인 했습니까? – Volker