每次生成一个新的ViewController实例

时间:2013-03-08 11:08:52

标签: ios

我有ViewController的音频播放器。我在ViewController的{​​{1}}中选择了另一个名为DidSelectRow的{​​{1}}中的tableview来调用此viewcontroller。我遇到的问题是我选择的时候一首歌,它推向音频层视图控制器并开始播放,但是当我按下并从专辑中选择另一首歌曲时,前一首歌曲不会停止,它仍会在选择新歌曲时播放。现在新选择的歌曲推送到音频播放器AlbumViewController的另一个实例并播放。而之前选择的歌曲也随之播放。并且对于每个歌曲的选择,推送音频播放器viewcontroller的新实例,并且一起播放所有选择的歌曲。我的相册控制器有viewcontroller,它的选择行代码如下所示

tableview

和音频播放器播放方法如下。

 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];

3 个答案:

答案 0 :(得分:1)

对ViewController使用单一实例并尝试这样

在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:@“details”];
  2. 而不是这个方法

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

    //精确单线实例创建

    1. viewContObj = [ViewController getViewControllerInstance];
    2. 并尝试..

答案 1 :(得分: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]; 
}

好吗?

答案 2 :(得分:0)

将一个ivar放入.m文件的@interface部分,如下所示

@property (strong, nonatomic) ViewController *playerView;

viewDidLoad方法中,使用alloc init,如下所示

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

并在tableView: didSelectRowAtIndexPath:方法中执行以下操作

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

这可以解决你的问题:)