Как я могу воспроизвести / остановить воспроизведение песни с помощью NSSound? - PullRequest
0 голосов
/ 07 октября 2018

Я использую NSSound для воспроизведения песни с моего FTP-сервера.

Моя проблема:

1-я песня не остановится, перекрывая в этомКстати, вторая вторая песня.

Здесь я вставляю полный код.Это поведение, когда я нажимаю на песню в NSTableView

-(void)tableViewSelectionDidChange:(NSNotification *)notification{

   NSInteger row = [[notification object] selectedRow];
   NSString *URL = [NSString stringWithFormat:@"ftp://user:pass@IP/Public/Music/%@",[TableContents objectAtIndex:row]];

   NSSound *song = [[NSSound alloc]initWithContentsOfURL:[NSURL URLWithString:URL] byReference:NO];

   NSLog(@"is playing before %hhd", song.isPlaying);

      if(song.isPlaying){
        [song stop];
        NSLog(@"is playing IF if %hhd", song.isPlaying);

      }else{
        [song play];
        NSLog(@"is playing ELSE %hhd", song.isPlaying);
      }

}

Выход:

Когда я нажимаю на 1-ю песню:

2018-10-06 23:51:08.488690+0200 AIOMediaCenter[4294:492923] is playing before 0
2018-10-06 23:51:08.489099+0200 AIOMediaCenter[4294:492923] is playing ELSE 1

Когда я нажимаю на 2-ю песню:

2018-10-06 23:51:12.022284+0200 AIOMediaCenter[4294:492923] is playing before 0
2018-10-06 23:51:12.022375+0200 AIOMediaCenter[4294:492923] is playing ELSE 1

1 Ответ

0 голосов
/ 07 октября 2018

Каждый раз, когда вы щелкаете по нему, вы создаете новый song объект.Вам необходимо сохранить указатель на объект song где-нибудь при создании нового объекта, а затем проверить, существует ли 1) объект, 2) isPlaying равен TRUE, чтобы остановить его.Это займет больше планирования с вашей стороны.Это выходит за рамки вопроса.

(Вы также никогда не выпускаете song после его выделения, что приведет к утечке памяти.)

...