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)。祝你好运