Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 找不到标识符为的segue_Objective C_Xcode5_Segue - Fatal编程技术网

Objective c 找不到标识符为的segue

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

我有以下代码:

在1类(GamePlay1)中,我有一个方法,可以在游戏结束时更改视图控制器:

 -(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或通知的控制器进行沟通,就像我在评论中没有空间一样。我的建议是花些时间学习可可的基本模式。一个很好的资源就是斯坦福课程,你可以在网上免费找到