2015-06-14 149 views
2
傳遞到另一個數據視圖控制器

在我開始之前,讓我說,我已經在流行後對此事採取一看:Passing Data between View Controllers斯威夫特

我的項目是在github https://github.com/model3volution/TipMe

我的內一個UINavigationController,因此使用push segue。

我已驗證我的IBAction方法已正確關聯,並且segue.identifier對應於故事板中的segue標識符。

如果我拿出prepareForSegue:方法,那麼會發生segue,但顯然沒有任何數據更新。

我的具體錯誤消息是:Could not cast value of type 'TipMe.FacesViewController' (0x10de38) to 'UINavigationController' (0x1892e1c).

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
// Get the new view controller using segue.destinationViewController. 
    if segue.identifier == "toFacesVC" { 
     let navController:UINavigationController = segue.destinationViewController as! UINavigationController 
     let facesVC = navController.topViewController as! FacesViewController 
     facesVC.balanceLabel.text = "Balance before tip: $\(balanceDouble)" 
    } 

} 

下面的代碼和錯誤的屏幕截圖。 旁註:使用的Xcode 6.3,雨燕1.2 screen shot with code and error

+0

正如另一條評論已經建議:在你的問題中包含代碼。我現在爲你做了這個,因爲提供該項目下載到某處可以讓其他用戶更容易地幫助你。我喜歡那個:) +1 – luk2302

回答

3

幾件事情:

1:改變你的prepareForSegue

if segue.identifier == "toFacesVC" { 
    let facesVC = segue.destinationViewController as! FacesViewController 
    facesVC.text = "Balance before tip: $\(balanceDouble)" 
} 

2:一個字符串變量添加到您的FacesViewController

var text:String! 

3:更改FacesViewControllerviewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    balanceLabel.text = text 
} 

所有變化的原因:在SEGUE destinationViewController是實際FacesViewController你過渡到 - >無需對navigationController有心計。僅此一項就會消除「大小寫錯誤」,但由於您嘗試訪問尚未設置的balanceLabel,因此將展開另一個零值,因爲它將展開一個零值。因此,您需要創建一個字符串變量來保存您實際想要分配的字符串,然後在viewDidLoad中分配該文本 - 在UILabel實際分配的位置。

證明了它的工作原理:

enter image description here

4:如果你想爲你可能會改變字符串創建到類似的信息(以下https://stackoverflow.com/a/24102844/2442804)餘額顯示小數點後兩位:

facesVC.text = String(format: "Balance before tip: $%.2f", balanceDouble) 

產生於:

enter image description here

+0

我想他希望它是「$ 4.00」而不是「$ 4.0」。我不知道如何在Swift中完成它,但是在Objective C中,它返回一個'NSString'對象:'[NSString stringWithFormat:@「在tip之前的平衡:$。2f「,balanceDouble]' – DDPWNAGE

+0

可能不知道與他的實際問題沒有任何關係,而且我不知道在字符串文字'\(...)'中做什麼的方法' – luk2302

+0

我知道它與OP的問題沒有多大關係,但我只是看着屏幕截圖,「$ 4.0」讓我有點生氣 – DDPWNAGE