Objective c 找不到标识符为的segue
我有以下代码: 在1类(GamePlay1)中,我有一个方法,可以在游戏结束时更改视图控制器:Objective c 找不到标识符为的segue,objective-c,xcode5,segue,Objective C,Xcode5,Segue,我有以下代码: 在1类(GamePlay1)中,我有一个方法,可以在游戏结束时更改视图控制器: -(void)end { [self performSegueWithIdentifier:@"menu1" sender:self]; } 在2 SKView类中,我有一个方法调用1类中的函数来更改视图控制器: -(void)gameEnded { GamePlay1 *gp1 = [[GamePlay1 alloc]init]; [gp1 end]; }
-(void)end
{
[self performSegueWithIdentifier:@"menu1" sender:self];
}
在2 SKView类中,我有一个方法调用1类中的函数来更改视图控制器:
-(void)gameEnded
{
GamePlay1 *gp1 = [[GamePlay1 alloc]init];
[gp1 end];
}
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
GamePlay1 *controller = [storyboard instantiateViewControllerWithIdentifier:@"GamePlay1"];
[controller end];
我得到警告:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<GamePlay1: 0x156329e0>) has no segue with identifier 'menu1''
***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“Receiver()没有标识符为“menu1”的序列”
我尝试过几次更改sequename,也尝试过清理我的项目、删除应用程序并再次安装,但结果都是一样的 segue是在故事板中定义的,当使用alloc和init手动实例化类时,控制器没有对IB对象的引用,因此没有定义segue。您希望使用情节提要本身来实例化控制器:
-(void)gameEnded
{
GamePlay1 *gp1 = [[GamePlay1 alloc]init];
[gp1 end];
}
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
GamePlay1 *controller = [storyboard instantiateViewControllerWithIdentifier:@"GamePlay1"];
[controller end];
请注意,这不是执行segue的正确方法,您需要获取对当前实例化viewcontroller的引用,而不是创建新的引用。错误中的segue标识符在一种情况下命名为“menu1”,在代码中命名为“menu”。编写问题时出错。好的,我理解第一部分!但是你能不能给我解释一下正确地做一个序列的部分?tnx!据我所知,当您执行
end
segue时,您当前的可视视图控制器是GamePlay1
控制器。如果是这种情况,您不需要实例化这种新的控制器,但可以在其当前实例上调用performsgue。例如,您可以使用委派:您的视图将在其委派(GamePlay1实例)上调用一个方法,该方法将执行segue。请记住,视图不应保存数据,因此不应实例化新的ViewController。他们需要“愚蠢”,并与具有委派、kvo或通知的控制器进行沟通,就像我在评论中没有空间一样。我的建议是花些时间学习可可的基本模式。一个很好的资源就是斯坦福课程,你可以在网上免费找到