2015-12-11 32 views
0

我正在做一些非常錯誤的事情,但我不明白是什麼。 所以我派我的字符串是這樣的:使用Swift與segue一起發送後數據消失

var someString = "My String" 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "MyCustomIdentifier") { 
     let vc = segue.destinationViewController as! MySecondViewController 

     vc.someString = someString 
    } 
} 

而且MySecondViewController得到someString的價值:

var someString = String() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    print(someString) //Prints String as expected, all good 
} 

但是當我需要它來訪問imagePickerController:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    print(someString) //Nothing is printed, there is no value in someString 
} 

什麼在這裏發生?我需要imagePickerController中的字符串值,因爲我將使用Alamofire發送選定的圖像,並且該字符串是我的標題。

編輯:發現了問題 - 我是在同一時間讓我從服務器someStringprepareForSegue漸漸調用。

+0

是'didFinishPickingMediaWithInfo'叫呢?代表連接是否正確?在打印行中添加一些文字文本來檢查。 – vadian

+0

是的,調用了'didFinishPickingMediaWithInfo' - 我在MySecondViewController上有ImageView,它顯示了選中的圖片(例如我排除了不相關的(IMO)代碼)。委託如何連接不正確?在UIStoryboard中有「Show」標識符「MyCustomIdentifier」。你是什​​麼意思的文字?像'print(「這是字面文本」)',我這樣做,它按預期工作 – Xernox

+0

是的,因爲打印一個包含空字符串的變量什麼都不輸出 – vadian

回答

0

字符串是swift中的值類型,因此第二個ViewController會創建一個全新的實例。需要在第二個ViewController中傳遞一個參考,所以儘量宣佈它作爲一個可選的:

var someString : String! 
+0

剛剛嘗試過,並得到錯誤: '致命錯誤:意外地發現零,而解包可選值' – Xernox

+1

嗨Xernox 我剛剛在Xcode 7.1上測試過,它打印出字符串OK。我使用Show segue製作了2個VC。第二個VC繼承了UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate和委託連接(當然我也相信你)。它進入選取器並打印確定值。我的第二個最好的建議 - 看看你不要觸摸那個字符串之間的任何地方(評論發生或執行上面建議的didSet)。祝你好運。 –