视图控制器之间的数据未通过

时间:2016-05-07 10:25:05

标签: iphone xcode swift swift2

我正在创建一个应用程序,其中storyboard中有6个视图控制器。问题是数据在默认视图控制器和我添加的第一个(比如A和B)之间共享。我正在使用prepareforseque方法传递数据。当我添加两个视图控制器时问题就开始了。让我们说C和D我创建了两个新的swift文件并更改了两个视图控制器类名。我在C中创建了一个文本框和按钮,在D中标记了当我按下按钮时,文本字段的值没有传递到D视图控制器,尽管我使用了与A和B相同的方法和代码。当我想在两个新添加的视图控制器之间传递数据时,我必须做任何其他事情。

第一个viewcontroller,当按下按钮时,需要传递值1:

class PlaySelectMenu: UIViewController {

var value = Int()

@IBAction func twotofive(sender: AnyObject) {

    value = 1
}

override func viewDidLoad() {
    super.viewDidLoad()

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    let nextView : PlayGameView = segue.destinationViewController as! PlayGameView
      nextView.x = value
}
}

接收值并打印它的第二个视图控制器

import Foundation
import UIKit

class PlayGameView: UIViewController{

var x = Int()
override func viewDidLoad() {
    super.viewDidLoad()
    print(x)
}
}

这里我已经添加了来自对象库的视图控制器,而没有使用默认情况下存在于storyboard中的默认控制器。我不知道为什么这两个viewcontroller不工作。请帮忙。 关心开发

4 个答案:

答案 0 :(得分:0)

一种解决方案是将数据写入NSUserDefaults,然后从另一个视图控制器中的NSUserDefaults读回。可能不是在两个视图控制器之间共享数据的正确或正确的方法,但它对我来说是一个可靠的工作。

除此之外,您需要分享您的代码,以便我们可以看到发生了什么。

答案 1 :(得分:0)

您是否也可以在控制器C& D.如果您将前两个控制器中的代码复制/粘贴到另外两个控制器中,您确定在prepareForSegue方法中更改了目标segue的名称吗?

答案 2 :(得分:0)

假设您已在Storyboard中创建了segue:

您需要做的就是在public class Event extends RealmObject { ... private RealmList<Game> games; } 中添加所有必需的更新,因为prepareForSegue之后会调用twotofive

prepareForSegue

答案 3 :(得分:0)

由于您已从按钮单击连接segue到视图控制器,当您按下按钮时会自动调用segue。不要将segue从按钮连接到VC,而是将VC连接到VC。然后在最后添加以下行的按钮单击方法中:

git reset --hard HEAD@{2}

这将调用您的prepareForSegue。如果您使用VC中的segue调用多个VC,那么您可以使用segue.identifier来检查调用哪个VC,如下所示

@IBAction func twotofive(sender: AnyObject) {

    value = 1
    self.performSegueWithIdentifier("<Name of the segue identifier>", sender: self)
}