NSViewController中的奇怪行为

吴克普兰克

我已经开始了一个小项目,以使我的头脑变得更好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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章