Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Ios 我的变量值与传输时prepareForSegue的值不同?_Ios_Swift_Xcode_Xcode8 - Fatal编程技术网

Ios 我的变量值与传输时prepareForSegue的值不同?

Ios 我的变量值与传输时prepareForSegue的值不同?,ios,swift,xcode,xcode8,Ios,Swift,Xcode,Xcode8,基本上,我的变量(playerrors)通过按下按钮进行更新,然后视图控制器通过数据传输被切换到下一个。但是,变量的值(例如,应该从0增加1)传输为0(就好像没有按下按钮一样)。我在我的代码中有16个变量,我正试图转移它们,但奇怪的是,其中有一半(8个)起作用,而起作用的都是针对对手的值。不起作用的8个是玩家值(比如玩家错误) 我是XCode新手。我在高中上了一堂课,我们第一次学习编码,所以我还不是很擅长,但是我已经有好几天没有解决这个问题了!我在下面包含了我的视图控制器代码 触发youErro

基本上,我的变量(playerrors)通过按下按钮进行更新,然后视图控制器通过数据传输被切换到下一个。但是,变量的值(例如,应该从0增加1)传输为0(就好像没有按下按钮一样)。我在我的代码中有16个变量,我正试图转移它们,但奇怪的是,其中有一半(8个)起作用,而起作用的都是针对对手的值。不起作用的8个是玩家值(比如玩家错误)

我是XCode新手。我在高中上了一堂课,我们第一次学习编码,所以我还不是很擅长,但是我已经有好几天没有解决这个问题了!我在下面包含了我的视图控制器代码

触发youErrorDeep时,它会打印“从自我0到dvc:0的分段”


它应该与这样的东西一起工作:

@IBAction func youErrorDeep(_ sender: Any){
    playerErrors += 1
    playerErrorsDeep += 1
    print("deep \(playerErrors), \(playerErrorsDeep)")
    self.performSegue(withIdentifier: "segueForYouErrorDeep", sender: self) //instead of "segueForYourErrorDeep" use the identifier for the correct segue
}
你必须给每个片段一个唯一的标识符,但这样你仍然可以在一定程度上使用情节提要

这还确保在操作之后执行segue


如果您不确定如何给一个segue一个标识符,您所要做的就是单击segue图形,然后在“属性”下将标识符设置为任意字符串。

它应该可以处理如下内容:

@IBAction func youErrorDeep(_ sender: Any){
    playerErrors += 1
    playerErrorsDeep += 1
    print("deep \(playerErrors), \(playerErrorsDeep)")
    self.performSegue(withIdentifier: "segueForYouErrorDeep", sender: self) //instead of "segueForYourErrorDeep" use the identifier for the correct segue
}
你必须给每个片段一个唯一的标识符,但这样你仍然可以在一定程度上使用情节提要

这还确保在操作之后执行segue


如果您不确定如何为segue指定标识符,只需单击segue图形,然后在“属性”下将标识符设置为任意字符串。

您没有在代码中的任何位置调用
peformSegueWithIdentifier:sender
,因此,我假设您直接从Interface Builder中的操作出口触发segue

当您需要在按下按钮时执行某些代码时,这将不起作用,因为segue可能发生在执行
@IBAction
方法之前

您应该从操作出口删除segue,从Interface Builder中的View Controller对象创建segue,为该segue指定一个标识符,然后您可以使用
performsguewithidentifier:sender
@iAction
方法启动它


另外,为了可读性和可维护性,我强烈建议您创建一个类来存储播放器状态,然后您可以只传递该类的一个实例,而不是在代码中的任何位置调用
peformSegueWithIdentifier:sender
,因此,我假设您直接从Interface Builder中的操作出口触发segue

当您需要在按下按钮时执行某些代码时,这将不起作用,因为segue可能发生在执行
@IBAction
方法之前

您应该从操作出口删除segue,从Interface Builder中的View Controller对象创建segue,为该segue指定一个标识符,然后您可以使用
performsguewithidentifier:sender
@iAction
方法启动它



此外,为了可读性和可维护性,我强烈建议您创建一个类来存储播放器状态,然后您可以只传递该类的一个实例,而不是16个单独的变量

您是否尝试过手动编写segue而不是依赖情节提要?我不知道如何做到这一点!我是新手,我想我们只是在课堂上学习了如何使用故事板。请尝试在
youWinnerDeep(:)
prepare(for:sender:)
中设置Xcode断点。如果
prepare(for:sender:)
youWinnerDeep(:)
之前被调用,那么
playerrors
变量在被复制到
SixthViewController
之前,不会在本地
ThirdViewController
中被更新。这样做很简单。不管怎样,我之所以问这个问题,是因为你似乎对每个变量都执行相同的代码,而且因为你使用的是故事板分段,我不确定是否能保证你的IBAction会在你的segue之前执行是的@ChrisVig到底说了什么你尝试过手动编写segue而不是依靠故事板吗?我不知道怎么做!我是新手,我想我们只是在课堂上学习了如何使用故事板。请尝试在
youWinnerDeep(:)
prepare(for:sender:)
中设置Xcode断点。如果
prepare(for:sender:)
youWinnerDeep(:)
之前被调用,那么
playerrors
变量在被复制到
SixthViewController
之前,不会在本地
ThirdViewController
中被更新。这样做很简单。不管怎么说,我问这个问题的原因是因为你似乎对每个变量都执行相同的代码,而且因为你使用的是故事板序列,我不确定你的iAction是否会在你的序列之前执行。是的@ChrisVig说了什么?我对你输入的标识符字符串做了什么?我必须对每个按钮都这样做?我需要删除我放在故事板(14)上的所有片段吗?不,不,你所要做的就是点击每个片段,给它一个标识符,然后在你的代码中反映该标识符(我会更新我的代码,告诉你在哪里)。此外,我应该去掉dvc/self数据传输的大prepareForSegue列表,还是不行?你现在的做法是,你需要保留那部分。否则,这些值将不会传输到新的VC。好的!我会试试这个,然后报告发生了什么。非常感谢你迄今为止的帮助。我真的很感激。这已经困扰了我好几天了。我该如何处理您输入的标识符字符串?我必须对每个按钮都这样做?我需要删除我放在故事板(14)上的所有片段吗?不,不,你知道吗