2016-02-27 15 views
0

所以我一直在努力学习之后,迅速清理和我所遇到的问题,并已经让我坚持了一段时间。我使用seques将第一个控制器的数据传递给第二个控制器。顺利通过Segue公司不断变化的负载

当我打印变量的onLoad它打印出来传递正确的价值观,但是在我执行其他功能(点击一个红色按钮)不会打印出传递的值,而是空值。

var Level = 0; 
var userId: String = ""; 
var clanId: String = ""; 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
    print(userId); //prints 97 
    print(clanId); //prins 2 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
@IBAction func redButtonClick(sender: AnyObject) { 
    print(userId); //prints "" 
    print(clanId); //prins "" 
} 

正如你可以在代码中看到它似乎有什么东西很简单,但很明显,我很想念它是如何工作的onload事件后的变量包含没有在其中。

谢谢大家的帮助!

------------------编辑----------------------

已更改值用户id:字符串= “测试” 更改的值clanId:字符串= “测试”

现在打印出在有载功能

print(userId) 
print(clanId) 

results: 
97 
2 
test 
test 

------------ ----加成-----------

@IBAction func loginButton(sender: AnyObject) { 
    self.performSegueWithIdentifier("dashboard", sender: self); 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "dashboard") 
     { 
      let dutydash:dashboardController = segue.destinationViewController as! dashboardController; 
      dutydash.userId = self.userId; 
      dutydash.clanId = self.clanId; 
     } 
} 
+0

,你试过没有initializating帐户及clanId? ('var userId:String!var clanId:String!')当点击按钮时,它们可能会重置为其原始值? – kye

+0

使我收到此这些变化后: 致命错误:意外发现零而展开的可选值 然后,如果我添加了一个?代替 !我得到的输出92,2,零,零 – user5600884

+0

请从第一控制器,当和大家分享一些代码,你如何Segue公司到目的地 – AamirR

回答

2

下面是一个工作示例,请确保您的数据在prepareForSegue中设置。

class prevClass: UIViewController{ 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "nextView" { 
      let destinationVC = segue.destinationViewController as! NextView 
      destinationVC.userId = "77789"; 
      destinationVC.clanId = "Awesome Clan" 

     } 
    } 
    @IBAction func next(sender: AnyObject) { 
     self.performSegueWithIdentifier("nextView", sender: self) 

    } 
} 

class NextView: UIViewController { 

    var userId: String! 
    var clanId: String! 

    override func viewDidLoad() { 
    } 

    @IBAction func redButtonClick(sender: AnyObject) { 
     print(userId); 
     print(clanId); 
    } 
} 
1

点夫妇建议:

  • 更改您的userIdclanId初始设定的东西,而不是""别的,像"test",看看这是一个问题
  • 在斯威夫特,你不要在每个月底需要;线
  • 所有变量应该是骆驼的情况下(从小写),所以更改Levellevel
+0

我改成了测试,现在我得到的打印输出(在onload功能时) 测试 测试 后来,当我点击其他功能我得到的测试 – user5600884

+0

好了,发生了什么事是他们由于VC的生命周期而再次分配。正如@kye提到的,如果你确定它们将由其他VC设置,你可以将它们更改为'var userId:String!',否则你会崩溃。 – sschale

+0

我对他上面的雄蕊评论过。它会抛出一个错误,指出在解包可选值时发现它为零。 – user5600884

1

我能想到的唯一的事情就是你可能同时运行视图控制器的两个或多个实例。在viewdidload和button action内部打印“self”,并检查两者是否相等。