Lin*_*ing 3 observers avfoundation ios avplayer
我在阻止AVPlayers时间观察者时遇到困难.
我有一个像这样运行的AVPlayer播放器:
player = [[AVPlayer alloc] initWithURL:[NSURL fileURLWithPath:path]];
Run Code Online (Sandbox Code Playgroud)
然后我添加了一个观察者
[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];
Run Code Online (Sandbox Code Playgroud)
一旦我完成了播放器,我就这样做了:
[player pause];
[player removeTimeObserver:self.timeObserver]
player = nil;
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我在代码中放置断点并使用XCode逐步执行代码时,它可以工作.我可以看到块停止打印出"观察者代码"
但是当我在没有断点的情况下正常运行代码时,我可以看到在调用[player removeTimeObserver]之后观察者仍然以相同的间隔运行.
有任何想法吗?
MDB*_*983 19
很高兴看到weakSelf为你工作......
在上面我没有看到你分配结果
[player addPeriodicTimeObserverForInterval ...
Run Code Online (Sandbox Code Playgroud)
to self.timeObserver它可能是一个错字但它应该是;
self.timeObserver = [player addPeriodicTimeObserverForInterval ...
Run Code Online (Sandbox Code Playgroud)
如果你打算打电话
[player removeTimeObserver:self.timeObserver];
Run Code Online (Sandbox Code Playgroud)
你也错过了";" 以上.
| 归档时间: |
|
| 查看次数: |
6710 次 |
| 最近记录: |