Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Swift通过segue发送数据后,数据消失_Ios_Swift_Uiimagepickercontroller_Segue - Fatal编程技术网

Ios 使用Swift通过segue发送数据后,数据消失

Ios 使用Swift通过segue发送数据后,数据消失,ios,swift,uiimagepickercontroller,segue,Ios,Swift,Uiimagepickercontroller,Segue,我做错了一件事,但我不明白是什么。 所以我发送我的字符串如下: var someString = "My String" override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "MyCustomIdentifier") { let vc = segue.destinationViewController as! MySeco

我做错了一件事,但我不明白是什么。 所以我发送我的字符串如下:

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:发现问题-在调用
prepareforsgue
的同时,我从服务器获取了我的
someString
值。

字符串是swift中的值类型,因此第二个ViewController创建了一个全新的实例。需要传递引用,请尝试在第二个ViewController中将其声明为可选:

var someString : String!

是否调用了
didFinishPickingMediaWithInfo
?代理是否正确连接?在打印行中添加一些文字来检查。是的,调用了
didFinishPickingMediaWithInfo
——我在MySecondViewController上有ImageView,它显示所选图像(在示例中,我排除了不相关的(IMO)代码)。代理如何连接不正确?在UIStoryboard中有一个标识符为“MyCustomIdentifier”的“Show”segue。你说的文字是什么意思?像
打印(“这是文字”)
一样,我这样做了,它的工作原理与预期一样是的,因为打印包含空字符串的变量不会打印任何东西。我不明白,为什么imagePickerController中的某个字符串变量变为空,但在viewDidLoad中有值?我认为您正在设置的值必须在某个时候被替换。若要查看何时发生这种情况,请尝试使用如下断点将didSet添加到属性:
var someString=String(){didSet{///在此处放置断点}
刚刚尝试过,但出现错误:
致命错误:在展开可选值时意外发现nil
Hi-Xernox我刚刚在Xcode 7.1上测试过,它打印了字符串OK。我用Show segue制作了两张VCs。第二个VC继承了UIViewController、UIImagePickerControllerDelegate、UINavigationControllerDelegate,当然还有委托连接(我相信你也继承了)。它进入选择器并打印值OK。我的第二个最好的建议是,不要在这两个字符串之间的任何地方触摸该字符串(评论事件或执行上面建议的didSet)。祝你好运