AVPlayer删除了periodicTimeObserver

时间:2014-09-26 20:45:19

标签: ios avfoundation avplayer observers

我很难停止AVPlayers时间观察员。

我有一个像这样运行的AVPlayer播放器:

player = [[AVPlayer alloc] initWithURL:[NSURL fileURLWithPath:path]];

然后我添加一个观察者

    [player addPeriodicTimeObserverForInterval:CMTimeMake(3, 10) queue:NULL usingBlock:^(CMTime time){
        NSTimeInterval seconds = CMTimeGetSeconds(time);
    NSLog(@"observer called");
        for (NSDictionary *item in robotR33) {
            NSNumber *time = item[@"time"];
            if ( seconds > [time doubleValue] && [time doubleValue] >= [lastTime doubleValue] ) {
               // NSLog(@"LastTime: %qi", [lastTime longLongValue]);
                lastTime = @(seconds);
                NSString *str = item[@"line"];
                [weakSelf nextLine:str];
               // NSLog(@"item: %qi", [time longLongValue]);
               // NSLog(@"Seconds: %f", seconds)
            };
        }
    }];
    [player play];

一旦我完成了播放器,我就会这样做:

[player pause];
[player removeTimeObserver:self.timeObserver]
player = nil;

奇怪的是,当我在代码中放置断点并使用XCode逐步执行代码时,它可以工作。我可以看到该块停止打印出“观察者代码”

但是当我在没有断点的情况下正常运行代码时,我可以看到在调用[player removeTimeObserver]之后观察者仍然以相同的间隔运行。

有什么想法吗?

1 个答案:

答案 0 :(得分:19)

很高兴看到weakSelf为你工作......

在上面我没有看到你分配

的结果
  [player addPeriodicTimeObserverForInterval ...

到self.timeObserver它可能是一个错字但它应该是;

   self.timeObserver =  [player addPeriodicTimeObserverForInterval ...

如果你打算打电话

   [player removeTimeObserver:self.timeObserver]; 

你也错过了“;”上方。