我嘗試了許多可能性,我在這個網站上發現並從蘋果開發者頁面閱讀了一些解釋 ,但似乎我無法解決我的問題 加載NSViewController /表單NIB。Cocoa:用nib加載NSViewController
文件上的Xcode的項目看起來有點像這樣:
- SecondViewController.h
- SecondViewController.m
- SecondViewController.xib
- AppDelegate.h
- AppDelegate.m
- MainMenu.xib
主要的問題是我如何編程創建SecondViewController與 上SecondViewController.xib初始筆尖
- 上MainMenu.xib自定義類FileOwner是的NSApplication
- 定製類FileOwner對SecondViewController .xib是SecondViewController
- MainMenu.xb中有一些面板和窗口(關於窗口和偏好面板)
- 此應用程序沒有主窗口(使用通知圖標狀態欄)
SecondViewController.h
@interface SecondViewController : NSViewController {
BOOL fullScreenMode;
NSImageView *fullScreenbg;
NSImageView *imageView1;
NSImageView *imageView2;
NSPanel *imageWindow;
}
@property (assign) IBOutlet NSImageView *fullScreenbg;
@property (assign) IBOutlet NSImageView *imageView1;
@property (assign) IBOutlet NSImageView *imageView2;
@property (assign) IBOutlet NSPanel *imageWindow;
SecondViewController.m
@implementation SecondViewController {
NSImageView *nv1;
NSImageView *nv2;
NSSize curImgSize;
}
@synthesize fullScreenbg;
@synthesize imageView1;
@synthesize imageView2;
@synthesize imageWindow;
......
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Initialization code here.
fullScreenMode = YES;
}
return self;
}
AppDelegate.h
@interface AppDelegate : NSObject <NSApplicationDelegate,NSWindowDelegate> {
NSPanel *aboutWindow;
IBOutlet NSMenu *myStatusMenu;
IBOutlet NSMenuItem *toggleFullScreen;
}
AppDelegate.m
@implementation AppDelegate {
SecondViewController *controller;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
controller = [[SecondViewController alloc]
initWithNibName:@"SecondViewController"
bundle:nil];
//Not work (fullscreenbg, imageView1, imageView2,imageWindow = nil)
//controller = [[SecondViewController alloc] init]; ?? <-- didn't work either
}
即使使用initWithNibName或者只是初始化,所有IBOutlet屬性在調試時似乎都沒有 。我試過其他的解決方案,如「NSBundle loadNibNamed」或using loadView,但它沒有工作(警告消息:「NSObject我沒有響應loadView」)。
secondViewController的主要目的是顯示通知消息,包括 圖形和Web元素。
我希望有人能給我一個最好的建議。謝謝。
在你的NSViewController的初始化過程中設置一個斷點,看看你是否實際初始化它。 – TheAmateurProgrammer
當然。執行appdelegate時的初始化,在執行第二個控制器時的initwithnibname,控制器不是零/空,但所有控制器出口都是零/空。 – theodorusap
只有網點?你是否手動設置網點?如果是,請嘗試將它們設置在awakeFromNib中。 – TheAmateurProgrammer