2013-07-12 6 views
0

Я начал крошечный проект, чтобы окунуться в 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][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 и Параг Bafna я переделал немного больше и нашел что в то время, когда я звоню [movieViewController openMovieWithURL:url]; внутри моего AppController, розетки еще не подключены.

Это моя реализация 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 
+0

is 'movieView' nil? – Kreiri

+0

Где вы инициализируете movieView? –

+0

Хм. movieView - это выход, и он подключается через Interface Builder, но, как вы догадались, он фактически является нулевым (как и мой startButton). Как я могу продолжить? – Wukerplank

ответ

0

Да, глупо меня. В Interface Builder я подключил свои элементы управления к неправильному объекту. I должен использовал владельца файла, но вместо этого я перетащил NSObject и установил его класс в NNMovieViewController и подключил к нему виджетов.