我已经开始了一个小项目,以使我的头脑变得更好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]?@"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
,它就起作用了。。。
更新
在收到Kreiri和Parag Bafna的评论后,我进行了一些修改,发现当时我[movieViewController openMovieWithURL:url];
在AppController中调用时,Outlet还没有连接。
这是我的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
是的,愚蠢的我。在Interface Builder中,我用错误的对象连接了控件。我应该使用File的Owner,但是我拖了一个NSObject并将其类设置为NNMovieViewController
并将小部件连接到它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句