ios – NSNotification中的观察者(itemDidFinishPlaying)随机调用两次

ios – NSNotification中的观察者(itemDidFinishPlaying)随机调用两次,第1张

概述视频播放完毕后,我正在显示文本.我正在使用通知技术来实现这一目标.唯一的问题是Observer每隔一段时间被调用两次.它触发“itemDidFinishPlaying”两次(因此同名的方法).我无法预测何时.我不知道为什么.它看起来是随机的(我知道这听起来很奇怪)就好像它工作得很好让我们说连续15次,然后下一次这种行为突然发生了.我做了一个重建并运行应用程序,这次它连续运行19次,然后两次调用Ob 视频播放完毕后,我正在显示文本.我正在使用通知技术来实现这一目标.唯一的问题是Observer每隔一段时间被调用两次.它触发“itemDIDFinishPlaying”两次(因此同名的方法).我无法预测何时.我不知道为什么.它看起来是随机的(我知道这听起来很奇怪)就好像它工作得很好让我们说连续15次,然后下一次这种行为突然发生了.我做了一个重建并运行应用程序,这次它连续运行19次,然后两次调用Observer等等……不可预测.我已经尝试过每个场景来预测BUG以便修复它.到目前为止,这是不可能的.所以我有2个问题.

1)为什么会发生并“随机”?

2)如何解决这个双重调用问题?

这两个以下的对话也没有帮助:

Why the Observer in NSNotification called twice….?

How to stop the Observer in NSNotification to called twice?

请在下面找到我的代码:

- (voID) playAnimation: (Nsstring *) theString {UIVIEw *thisCurrentVIEw = self.currentVIEw;UIVIEw *thisReplacementVIEw = [[UIVIEw alloc] init];//[avPlayer pause];[self replaceVIEw: thisCurrentVIEw withVIEw: thisReplacementVIEw];Nsstring *filepath = [[NSBundle mainBundle] pathForResource:theString ofType:@"mov"];NSURL *fileURL = [NSURL fileURLWithPath:filepath]; // First create an AVPlayerItem AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:fileURL]; // Subscribe to the AVPlayerItem's DidplayToEndTime notification.[[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(itemDIDFinishPlaying) name:AVPlayerItemDidplayToEndTimeNotification object:playerItem]; // Pass the AVPlayerItem to a new player controlledplayer = [[AVPlayer alloc] initWithPlayerItem:playerItem];AVPlayerLayer *animatedLayer = [AVPlayerLayer playerLayerWithPlayer:controlledplayer];[animatedLayer setFrame:CGRectMake(0,1024,1024)];[thisReplacementVIEw.layer addSublayer: animatedLayer];// Begin playback[controlledplayer play];// Clear some content[self displayNoContent];pageContent = theString;playingStatus = YES;

}

– (voID)itemDIDFinishPlaying {

[self displayContent: pageContent];

}

解决方法 试试这个,
-(voID)itemDIDFinishPlaying {      [self displayContent: pageContent];      [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidplayToEndTimeNotification object:playerItem];}

它可能适合你.

EDIT1:

在设置新方案之前,每次都要删除通知观察者.尝试下面的方案.它将确保删除前一个观察者(即使它不存在也没问题)并添加新的观察者.

// Subscribe to the AVPlayerItem's DidplayToEndTime notification.[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidplayToEndTimeNotification object:playerItem];[[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(itemDIDFinishPlaying) name:AVPlayerItemDidplayToEndTimeNotification object:playerItem];
总结

以上是内存溢出为你收集整理的ios – NSNotification中的观察者(itemDidFinishPlaying)随机调用两次全部内容,希望文章能够帮你解决ios – NSNotification中的观察者(itemDidFinishPlaying)随机调用两次所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存