Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 防止AVAudioPlayers同时播放_Ios_Objective C_Avaudioplayer - Fatal编程技术网

Ios 防止AVAudioPlayers同时播放

Ios 防止AVAudioPlayers同时播放,ios,objective-c,avaudioplayer,Ios,Objective C,Avaudioplayer,我有一个包含几个单元格的UITableView,每个单元格都有一个按钮,可以触发在子类单元格中创建的AVAudioPlayer。每个单元格代表一个人,点击按钮即可播放其音频文件 现在,当我点击第一排时,它会像它应该的那样播放。但是当我点击第二排时(第一排还在播放),很明显,它会同时播放两个。如果第一排正在播放,我想停下来 我试图在我的视图控制器中创建YBCell的属性,如果一行播放声音,它会停止其他单元格播放,并将自身指定给该属性。这样,第一次它将是nil YBCell.m - (IBActio

我有一个包含几个单元格的UITableView,每个单元格都有一个按钮,可以触发在子类单元格中创建的
AVAudioPlayer
。每个单元格代表一个人,点击按钮即可播放其音频文件

现在,当我点击第一排时,它会像它应该的那样播放。但是当我点击第二排时(第一排还在播放),很明显,它会同时播放两个。如果第一排正在播放,我想停下来

我试图在我的视图控制器中创建
YBCell
的属性,如果一行播放声音,它会停止其他单元格播放,并将自身指定给该属性。这样,第一次它将是
nil

YBCell.m

- (IBAction)playOrStop:(id)sender
{
    if (thisCellIsPlaying)
    {
        [self.audioPlayer stop];
        thisCellIsPlaying = FALSE;
    }
    else
    {
        YBViewController *vc = [[YBViewController alloc] init];
        [vc stopOtherCellPlaying];

        [self.audioPlayer play];
        [vc setPlayingCell:self];

        thisCellIsPlaying = TRUE;
    }
}
YBViewController.h

@property (strong, nonatomic) YBCell *playingCell;
- (void)stopPlaying;
YBViewController.m

- (void) stopPlaying
{
    [self.playingCell.audioPlayer stop];
}
问题是,当我在
-(void)stopPlaying
中选中
self.playingCell
时,它总是返回
nil
。另外,对于每个单元格使用
indexPath.row
标记,而不是整个单元格,也不起作用,因为它总是返回0


如果没有一个直接的答案,我可能会尝试在视图控制器中创建一个音频播放器,并让单元格共享它,虽然我认为最好让每个单元格都有自己的播放器。

看起来您正在创建新对象YBCell,并通过对象(AVaudioPlayer)播放来自YBViewController的歌曲。在应用程序委派中声明您的AVaudioplayer,并从YBCell&YBViewController

中访问它。最好在视图控制器中创建播放器。。。