itok's Lab

昔の開発ネタを記録として残してます

読み込み完了を検知する

例えばリモートにある動画・音声ファイルを指定してオブジェクトを生成した場合に、そのファイルの読み込みが完了(再生完了ではありません)したことを検知します。QTKitを使うと結構簡単で、NSNotificationの枠組みである程度処理できちゃいます。

{
...
    QTMovie* movie = [[QTMovie alloc] initWithURL:url error:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateChaned:) name:QTMovieLoadStateDidChangeNotification object:movie];
...
}

これで読み込み状態が変化した時にloadStateChanged:メソッドが呼び出されますので、その中でその状態変化が読み込み完了であるかどうかをチェック。

-(void) loadStateChaned:(NSNotification*)aNotification {
    QTMovie* movie = [aNotification object];
    Movie qtmov = [movie quickTimeMovie];
    long state = GetMovieLoadState(qtmov); // QuickTime APIを使用して読み込み状態を取得
    if (state == kMovieLoadStateComplete) { // 読み込み完了
        // do something
    }
}