gpt4 book ai didi

objective-c - 如何使用 xib 文件正确实现 NSWindowController 子类

转载 作者:行者123 更新时间:2023-12-04 03:12:18 25 4
gpt4 key购买 nike

我正在尝试使用新的 xib 文件实现一个 NSWindowController 子类,我阅读了很多书籍,并研究了 StackOverflow,但是所提供的步骤都没有使我的窗口显示,也没有执行子类代码。新的 xib 文件将其文件所有者设置为“LogNavigatorController”,并已建立到窗口及其内容的连接。

我的 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

最佳答案

您不需要创建 window 属性,因为它已经可用于 NSWindowController 子类。也许这会导致问题。

此外,您的 init 方法包含许多不属于该方法的代码。删除

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

以及替换

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

self = [super init];

您可能想要完全删除 init 方法,因为在您的情况下不需要它。

移动

[self myDirectoryLogFunction];

到 windowDidLoad 方法。

还要始终检查用于实例化窗口 Controller 的代码(在您的例子中来自应用程序委托(delegate) didFinishLaunching: )被调用。有时创建一个新项目并在那里进行测试会有所帮助,如果您可能在原始项目中进行了太多更改并且不小心删除了委托(delegate)连接或类似内容。

关于objective-c - 如何使用 xib 文件正确实现 NSWindowController 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21452399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com