在swift中的viewControllers之间传递数据

时间:2015-05-06 02:59:29

标签: swift xcode6 segue

我想知道他们是否有办法在一个视图加载后立即将数据发送到另一个视图。我正在尝试创建一个存储类似highScore的应用程序但是将数据从gameOver视图传递到mainMenu的唯一方法是,如果他们单击主菜单并使用prepareForSegue方法。他们是否可以像viewDidLoad函数一样发送它?

谢谢!

2 个答案:

答案 0 :(得分:1)

根据您使用UINavigationControllerGameOverViewController

在主菜单上添加以下代码:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    let navigationController = segue.destinationViewController as UINavigationController
    let gameOverVC = navigationController.topViewController as GameOverViewController
    gameOverVC.highScore = 26
}

如果您不使用UINavigationController

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
        let gameOverVC = segue.destinationViewController as GameOverViewController
        gameOverVC.highScore = 26
    }

然后,像这样添加你的highScore var:var highScore: NSString!

class GameOverViewController: UIViewController {

    var highScore: NSString!

    override func viewDidLoad() {
        println(self.highScore)
    }
}

它应该有用。

如果没有,请在帖子中添加更多代码。

编辑:

通过这种方式,您只需向前传递数据,而不是向后传递数据。要向后传递使用DelegationSingletonNSNotificationCenterNSUserDefaults

答案 1 :(得分:0)

向后传递数据,即从第二个视图到第一个,有Delegation模式和NSNotificationCenter等选项。

假设我们使用 NSNotificationCenter

在您的情况下,我们需要从highScore班级发送MainMenuGameOver

  1. 注册您的通知。(在MainMenu类的viewDidLoad中)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateHighScoreFromGameOver:", name: "notificationUpdateHighScoreFromGameOver", object: nil)
    
  2. 创建处理已发布通知的方法。 (在MainMenu班)

    @objc func updateHighScoreFromGameOver(notification: NSNotification){
    

    NSNumber highScore = notification.object;

        }
    
  3. 发布通知当您的游戏结束时(显示游戏结束消息后的下一行)。

    NSNotificationCenter.defaultCenter().postNotificationName("notificationUpdateHighScoreFromGameOver", object: hightScore_ofTypeNSNumber)
    
  4. 完成后删除观察者。 (在MainMenu类的viewWillAppear中)

     NSNotificationCenter.defaultCenter().removeObserver(self name: "notificationUpdateHighScoreFromGameOver", object: nil);
    
    //alternatively you can remove all observers on this object:
    NSNotificationCenter.defaultCenter().removeObserver(self);
    
  5. 注意:如果您不删除以前添加的观察者并再次添加,则该方法将被调用两次。如果第三次添加相同的观察者,该方法将被调用三次,依此类推。