Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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在ImagePickerController的didFinishPickingMediaWithInfo中不工作_Ios_Swift_Uiimagepickercontroller - Fatal编程技术网

Ios Swift segue在ImagePickerController的didFinishPickingMediaWithInfo中不工作

Ios Swift segue在ImagePickerController的didFinishPickingMediaWithInfo中不工作,ios,swift,uiimagepickercontroller,Ios,Swift,Uiimagepickercontroller,我有以下代码: func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { //dismiss(animated: true, completion: nil) guard info[UIImagePickerControllerMediaType] != nil else { return }

我有以下代码:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        //dismiss(animated: true, completion: nil)
        guard info[UIImagePickerControllerMediaType] != nil else { return }
        let mediaType = info[UIImagePickerControllerMediaType] as! CFString
        print("video is",mediaType)
        switch mediaType {
        case kUTTypeImage:
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage, let pickedAsset = info[UIImagePickerControllerPHAsset] as? PHAsset {
                self.screenshotOut = pickedImage
                MyVariables.isScreenshot = true
                self.thumbnailImage = pickedImage
                let creationDate = pickedAsset.creationDate
                self.mediaDate = creationDate
                dismiss(animated: true, completion: nil)
                self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)
                }

            }
            break
....
    default:
        dismiss(animated: true, completion: nil)

        print("something else")
        break
    }
}
正如您所看到的,它一直在等待,直到我的imagePickerController拥有照片资源。然后设置一些类变量并执行segue。我有这个功能为赛格做准备

override func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if segue.identifier == "CreatePost_Segue" {
        guard self.thumbnailImage != nil else {
            return
        }
        if MyVariables.isScreenshot == true {
            guard self.screenshotOut != nil else {
                return
            }
            //self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)
        } else {
            guard self.thumbnailImage != nil else {
                return
            }
            //self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)
            //now I set those three varibles?
        }
        let controller = segue.destination as! CreatePostViewController
        controller.postDate = mediaDate
        controller.thumbnailImage = thumbnailImage
        controller.videoURL = videoURL
        controller.screenshotOut = screenshotOut
        print("segued",controller.postDate)
        print("segued",controller.thumbnailImage)
        print("segued",controller.videoURL)
        print("segued",controller.screenshotOut)
    }
}
它打印:

segued Optional(2016-05-04 17:48:53 +0000)
segued Optional(<UIImage: 0x13d365720> size {2448, 3264} orientation 0 scale 1.000000)
segued nil
segued Optional(<UIImage: 0x13d365720> size {2448, 3264} orientation 0 scale 1.000000)
看来所有的控制器分配都起作用了。。。videoURL故意为零,并且是可选的,所以我相信这没关系


但这种情况从未发生过。选择器控制器被解雇了,这很好,但为什么这不是一个连续的过程呢

由于Disclease是动画的,VC当前正在呈现摄影机/照片库,因此它无法呈现另一个,您可以发送它

dismiss(animated: true, completion: nil)

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5)  {

  self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)

}
或者为了一个正确的延迟

self.dismiss(animated: true) {

   self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)

}

//您可能会在控制台中查找类似VC当前显示的消息。第二个可行,但仅仅将其更改为false就不行。是的,这两个都是故意写的,可能是在segue之前dismiiss行没有完全完成。将performsgue调用放在dismise的完成中不是正确的处理方法吗?