Ios 如何在弹出目标时保留ViewController-C
当视图控件从堆栈中弹出时,如何保留它 基本上我有一个Mp3播放器视图控制器。当我在视图控制器中时,我可以播放音乐。当播放音乐时,我导航到另一个控制器,音乐停止播放,当我导航回该控制器时,它会启动另一个控制器实例。因此,我的猜测是,可能会保留视图控制器 这是我启动音乐播放器视图控制器的方式:Ios 如何在弹出目标时保留ViewController-C,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,当视图控件从堆栈中弹出时,如何保留它 基本上我有一个Mp3播放器视图控制器。当我在视图控制器中时,我可以播放音乐。当播放音乐时,我导航到另一个控制器,音乐停止播放,当我导航回该控制器时,它会启动另一个控制器实例。因此,我的猜测是,可能会保留视图控制器 这是我启动音乐播放器视图控制器的方式: NSString *songLargeArtworkURL = [self.songArtworkURL stringByReplacingOccurrencesOfString:@"large" withS
NSString *songLargeArtworkURL = [self.songArtworkURL stringByReplacingOccurrencesOfString:@"large" withString:@"crop"];
MusicPlayerViewController *musicPlayer = [[MusicPlayerViewController alloc] init];
musicPlayer.songName = self.testString;
musicPlayer.songArtWork = songLargeArtworkURL;
musicPlayer.songStream = self.songStreamURL;
[self.navigationController pushViewController:musicPlayer animated:YES];
请使用实例变量,而不是对
MusicLayerViewController
使用局部变量。仅第一次分配musicPlayer
实例。如下所示:
NSString *songLargeArtworkURL = [self.songArtworkURL stringByReplacingOccurrencesOfString:@"large" withString:@"crop"];
if(! musicPlayer) {
musicPlayer = [[MusicPlayerViewController alloc] init];
}
musicPlayer.songName = self.testString;
musicPlayer.songArtWork = songLargeArtworkURL;
musicPlayer.songStream = self.songStreamURL;
[self.navigationController pushViewController:musicPlayer animated:YES];
上面的代码确保仅在第一次实例化音乐播放器。随后,它会推送音乐播放器的同一个实例我已经尝试过了,但我得到了一个错误:应用程序试图推送targetAre上的nil view控制器。您确定,您首先要分配它吗?是否有:if(!musicPlayer){musicPlayer=[[MusicPlayerViewController alloc]init];}“应用程序试图将nil视图控制器推送到目标上“推一个零对象时会出现错误。因此,如果您是第一次分配实例,则不应出现此错误。我猜您还没有第一次实例化这个实例。我想我发现了问题所在。mp3播放器出现在2视图之后,我刚意识到,当我弹出时,它会返回到第一个视图,从而生成第二个视图的新实例,从而使其为零。如果你明白我的意思,非常感谢!虽然我想到了这一点,但我不知道这是正确的做法:)