0
我已經開始了一個小項目,讓我的腦袋圍繞着NSViewController
s。NSViewController中的奇怪行爲
我有一個AppController
處理NSOpenPanel
。一旦我得到一個電影文件的URL,我將它傳遞給NSViewController
子類(NNMovieViewController
)。這就是我要做的事:
-(void)openMovieWithURL:(NSURL *)url {
NSError *error;
movie = [[QTMovie alloc] initWithURL:url error:&error];
[startButton setEnabled:YES];
[movieView setMovie:movie];
NSLog(@"button: %@", [startButton isEnabled][email protected]"YES":@"NO");
// logs "NO"
NSLog(@"movie: %@", movie);
// logs the correct movie object
NSLog(@"movieView: %@", [movieView movie]);
// logs "(null)"
}
頭文件看起來是這樣的:
#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>
@interface NNMovieViewController : NSViewController {
QTMovie *movie;
BOOL playing;
IBOutlet QTMovieView *movieView;
IBOutlet NSButton *startButton;
}
-(IBAction)clickStart:(id)sender;
-(void)openMovieWithURL:(NSURL*)url;
@end
我缺少什麼?更我重新做了一個項目,整個事情沒有NSViewController
,它只是工作...
UPDATE
我接到Kreiri和Parag Bafna的意見後,我修修補補一點點,發現當時我在我的AppController中調用[movieViewController openMovieWithURL:url];
時,Outlets尚未連接。
這是我的AppController實現:
#import "AppController.h"
@implementation AppController
@synthesize movieViewController;
- (void)awakeFromNib {
movieViewController = [[NNMovieViewController alloc] initWithNibName:@"NNMovieViewController" bundle:nil];
NSView *viewControllerView = [movieViewController view];
[view addSubview:viewControllerView];
}
- (IBAction)clickOpen:(id)sender {
NSOpenPanel *dialog = [NSOpenPanel openPanel];
[dialog setCanChooseFiles:TRUE];
[dialog setCanChooseDirectories:FALSE];
[dialog setAllowsMultipleSelection:FALSE];
[dialog setAllowedFileTypes:[QTMovie movieFileTypes:0]];
if ([dialog runModal] == NSOKButton) {
NSURL *movieFileURL = [[dialog URLs] objectAtIndex:0];
[self openMovie:movieFileURL];
}
}
- (void)openMovie:(NSURL *)url {
NSLog(@"startButton: %@", [movieViewController movieView]);
// logs "null"
NSLog(@"startButton: %@", [movieViewController startButton]);
// logs "null"
NSLog(@"---------------------------------");
[movieViewController openMovieWithURL:url];
}
@end
是'movieView'零? – Kreiri
你在哪裏初始化movieView? –
嗯。 movieView是一個插座,它通過Interface Builder連接,但正如你猜測的那樣,它實際上是空的(就像我的startButton一樣)。我如何繼續? – Wukerplank