如何将数据(分数)从第一个viewcontroller保存到第二个?

时间:2017-12-12 13:10:16

标签: ios swift uiviewcontroller sigabrt

我正在为我的学校的一个大项目创建一个ios的测验应用程序,但这是我第一次使用xcode和swift创建一些东西。我遇到了一个我似乎无法自己解决的问题。目前我正试图在多个ViewControllers中保持得分;我尝试了很多不同的东西,但它仍然无效。 就像我说的那样,我是xcode的菜鸟,实际上都是编码。

首先,我有得分代码:

@IBOutlet weak var scoreLabel: UILabel!                                                                   
var score = 0

在我的应用中,当有人回答正确的问题时,得分为1分(score += 1)。在第一个主题的4个问题之后,在不同的ViewController上显示了4个不同主题的问题。

这是我在第一个ViewController末尾的代码(MultipleChoice 2是我的第二个vc):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.destination is MultipleChoice2 {
        let vc = segue.destination as? MultipleChoice2
        vc?.score = score
    }
}

我的第二个vc的代码:

var score = Int()

@IBOutlet weak var scoreLabel: UILabel?

override func viewDidLoad() {
    super.viewDidLoad()
    scoreLabel?.text = String(score)
}

我可能做错了,但我希望应用程序将我的第一个ViewController的分数保存到第二个,这样,当有人在第一个vc中获得3分时,他仍然在第二个中获得3分VC。

我尝试过的其他内容根本不起作用,但是在使用此代码后,我在AppDelegate类中收到消息Thread 1:signal SIGABRT,然后单击发送给第二个viewcontroller的按钮。

老实说,我不知道如何将我的分数保存到下一个vc,如果有人有解决方案,这将是很好的..

3 个答案:

答案 0 :(得分:0)

检查所有插座是否已连接。之后检查segue是否已连接。

更改

var score = Int()

var score: Int = 0

在secondVC中再试一次。

答案 1 :(得分:0)

如果您在使用它时遇到任何问题,请尝试关注并告知我们: 首先将secondVC中得分变量的声明更改为

var score : Int = 0

然后在准备segue方法时你可以试试这些: 首先从故事板中设置segue标识符,因为它更方便使用: 那么你可以通过

检查我们是否处于适当的状态
if segue.identifier == "showSecondVC" {
    let vc = segue.destination as! MultipleChoice2
    vc.score = score
}

还使用断点检查一切是否正常执行 还有一件事是您可以使用以下代码设置标签文本:

scoreLabel?.text = "\(score)"

答案 2 :(得分:0)

  1. 在第二个视图控制器中将var score = Int()更改为var score: Int?
  2. 将故事标识符设置为故事板中的第二个视图控制器。
  3. 在第一个视图控制器中修改segue方法,如下所示

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showSecondVC" {
            let vc = segue.destination as! MultipleChoice2
            vc.score? = score
        }
    }