2013-03-08 5 views
0

У меня есть аудиоплеер в ViewController. Я называю это ViewController, когда песня выбрана в DidSelectRowtableview в другом viewcontroller, называемом AlbumViewController. Проблема, с которой я сталкиваюсь, - это когда я выбираю песню, она подталкивает к контроллеру просмотра аудиоплеера и начинает играть, но когда я нажимаю назад и выбираю другая песня из альбома, предыдущая песня не останавливается, она по-прежнему воспроизводится, когда выбрана новая песня. Теперь новая выбранная песня подталкивает к другому экземпляру аудиоплеера viewcontroller и играет. В то время как ранее выбранная песня также играет вместе с ней. И для каждого выбора песни вызывается новый экземпляр аудиоплеера viewcontroller, и все выбранные песни воспроизводятся вместе. Мой контроллер альбом, который имеет tableview с он сделал выберите код строки, как показано нижеНовый экземпляр ViewController, создаваемый каждый раз

viewContObj=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; //viewcontroller=audio player controller 
    [self.navigationController pushViewController:viewContObj animated:YES]; 
    viewContObj.url =[NSURL URLWithString:albumURLstring]; 
    [viewContObj playLiveStream:nil]; 

и способ воспроизведения аудио плеер, как показано ниже.

-(IBAction)playLiveStream:(id)sender 

{ if (![streamer isPlaying]) 

{ [self createStreamer]; 
    [self setButtonImageNamed:@"loadingbutton.png"]; 
    [streamer start]; 
} 
else 
{ [self setButtonImageNamed:@"play.png"]; 
    [streamer pause]; 
}} 
+0

Просто остановите аудиоплеер на didselect перед передачей URL и играть в viewWillAppear вашего аудио зрения игры. Надеюсь, это сработает.:) –

+0

Вы хотите назвать метод playlivestream в методе ViewWillAppear класса контроллера аудиоплеер? как это - (void) viewWillAppear: (BOOL) анимированный { [self playLiveStream: nil]; } – user2114872

+0

Да. и остановить игрока на didselect. B.T.W. какой плеер вы используете для воспроизведения звука? –

ответ

0

поставить одну Ивар в @interface части .m файла как этот

@property (strong, nonatomic) ViewController *playerView; 

И viewDidLoad метод Alloc инициализации его как ниже

playerView=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 

И tableView: didSelectRowAtIndexPath: способ сделать как ниже

playerView.url =[NSURL URLWithString:albumURLstring]; 
[playerView playLiveStream:nil]; 
[self.navigationController pushViewController:playerView animated:YES]; 

Может это решить вашу проблему :)

0

Добавить релиз после нажатия

viewContObj=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 
[self.navigationController pushViewController:viewContObj animated:YES]; 
viewContObj.url =[NSURL URLWithString:albumURLstring]; 
[viewContObj playLiveStream:nil]; 
[viewContObj release]; 

И в ViewController.m:

- (void)dealloc{ 
    [streamer stop]; 
    [streamer release]; 
    [super dealloc]; 
} 

Ok?

+0

Это программа дуги. поэтому я не использую dealloc! – user2114872

1

Используйте singletone экземпляр для ViewController и попробовать, как этот

создания singletone экземпляра в ViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
     { 
      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
      if (self) { 
       // Custom initialization 
      } 
      return self; 
     } 

//1. Customize singletone 

     -(id)initWithCustomDetails:(NSString *)customDetails 
     { 
      self = [super init]; 
      if(_sharedMySingleton) 
      { 
       [_sharedMySingleton.view removeFromSuperview]; 
       _sharedMySingleton = nil; 
      } 
      _sharedMySingleton = self; 

      return self; 
     } 

2. exact singletone method for creating instance 

+(ViewController *) getViewControllerInstance 
{ 
    @synchronized([ViewController class]) 
    { 
     if (!_sharedMySingleton) 
     { 
      _sharedMySingleton = [[self alloc] init]; 

     } 
     return _sharedMySingleton; 
    } 
    return nil; 
} 

При создании экземпляра используйте

  1. viewContObj = [[ViewController Alloc] initWithCustomDetails: @» Детали"];

вместо этого метода

viewContObj=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 

// Точный singletone создания экземпляра

  1. viewContObj = [ViewController getViewControllerInstance];

и попробовать ..

Смежные вопросы