2015-06-17 205 views
-1

我試圖按下一個按鈕時將值賦給變量,然後將其發送給我的第二個視圖控制器。無法將變量傳遞給第二個視圖控制器

我無法從我的第一個viewcontroller(FirstViewController.swift)傳遞一個變量(int)到我的secondcontroller(ViewController.swift)。

我的切入點是FirstViewController.swift

這是我的FirstViewController.swift代碼:

import UIKit 

var language:Int = 0 

class FirstViewController: UIViewController { 

@IBAction func dutch(sender: AnyObject) { 
    language = 1 
    println(language)//check in console 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var soundsVC = segue.destinationViewController as! ViewController 

    soundsVC.languageSelected = language 
} 

當按下按鈕@IBAction FUNC荷蘭被激活,已經發生後,應該改變語言的爲1的值

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

var languageSelected:Int = 0 

@IBAction func controleFunc(sender: AnyObject) { 
    println(languageSelected) 
    println(language) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.jpg")!) 
    // Do any additional setup after loading the view, typically from a nib. 
    println(languageSelected) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



} 

我的輸出是:

0 //languageSelected 
1 //language 
0 //languageSelected if the controle function is activated (controleFunc) 
1 //language if the controle function is activated (controleFunc) 

我剛開始學習Swift,所以我不知道爲什麼languageSelected不會採用語言的價值。是因爲我聲明瞭ViewController.swift頂部的languageSelected:Int = 0嗎?我試圖將其改爲languageSelected:Int = language,但不幸的是我得到了相同的結果。

謝謝! 塞澤爾

+0

所以你真的有var語言__outside__ FirstViewController類,或者是一個錯字? – nPn

回答

1

viewDidLoad()prepareForSegue()之前發生的事情,如果你想使用則傳遞的狀態,無論是覆蓋setter方法(如下),並用它做什麼,或做在viewWillAppear()

var languageSelected:Int = 0 { 
    didSet { 
     print("The language is: \(languageSelected)") 
    } 
} 
1

我不是100%確定你是如何設置的,但是我認爲你有相同的按鈕,開始segue並在按下時調用函數dutch()。我不認爲你保證dutch()會在prepareForSegue()之前被調用,但是你的代碼依賴於它們按照這個順序被調用。

我想移除dutch()(確保你在故事板上斷開連接)並直接從prepareForSegue()傳遞值。如果你有更多的按鈕開始一個segue,你可以通過將sender參數強制轉換爲UIButton並檢查它的currentTitle屬性來找出哪一個按鈕啓動了它。或者,您可以檢查賽格標識符,無論您喜歡什麼。

希望這會有所幫助!

相關問題