2015-12-11 1 views
0

Я делаю что-то очень неправильно, но я не понимаю, что. Так я посылая свою строку, как это:Данные исчезают после отправки с помощью segue с помощью Swift

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, и эта строка будет моим заголовком.

EDIT: Нашел проблему - я получаю мое someString значения от сервера в то же время, как prepareForSegue был вызывалось.

+0

Вызывается ли 'didFinishPickingMediaWithInfo' вообще? Правильно ли подключен делегат? Добавьте некоторый литеральный текст в строке печати, чтобы проверить это. – vadian

+0

Да, 'didFinishPickingMediaWithInfo' называется - у меня есть ImageView на MySecondViewController, и он отображает выбранное изображение (в примере я исключил нерелевантный (IMO) код). Как делегат может быть подключен неправильно? В UIStoryboard есть «Show» segue с идентификатором «MyCustomIdentifier». Что значит буквальный текст? Подобно 'print (" this literal text ")', я сделал это и работает как ожидалось – Xernox

+0

Да, потому что печать переменной, содержащей пустую строку, ничего не печатает – vadian

ответ

0

Строки представляют собой типы значений в swift, поэтому второй ViewController создает совершенно новый экземпляр. Необходимо передать ссылку, поэтому попробуйте объявить ее во втором ViewController в качестве дополнительного:

var someString : String! 
+0

Просто попробовал и получил ошибку: 'фатальная ошибка: неожиданно найден nil при разворачивании необязательного значения – Xernox

+1

Hi Xernox Я только что протестировал Xcode 7.1 и напечатал строку OK. Я сделал 2 VC с Show segue. Второй VC наследует UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate и делегат связан, конечно (как я полагаю, вы это сделали). Он входит в сборщик и печатает значение OK. Мой второй лучший совет - посмотрите, что вы не трогаете эту строку в любом месте (комментарии вступлений или выполнение предложенного выше метода didSet). Удачи. –