2016-02-27 66 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」,並檢查兩者是否相等。