0

Я пытаюсь передать изображение, которое снято с UIImagePickerController, другому ViewController, но изображение не проходит.UIImage не передается от одного ViewController к другому

Это код первого ViewController:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
{ 
    chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
    newImageView.contentMode = .scaleAspectFit 
    newImageView.image = chosenImage 

    self.performSegue(withIdentifier: "pass", sender: self) 

    dismiss(animated:true, completion: nil) 

    let svc = self.storyboard!.instantiateViewController(withIdentifier: "demoViewController") as! demoViewController 
    present(svc, animated: true, completion: nil) 

} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "pass" 
    { 
     let imgpass = segue.destination as! demoViewController 
     imgpass.newphoto = chosenImage 
    } 
} 

Код для второго ViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    myImageView.image = newphoto 
} 

Я прошел через много других подобных проводок и реализовали их тоже, но не смог получить изображение прошло.

+0

Можете ли вы добавить точку останова в эту строку и увидеть значение newphoto myImageView.image = newphoto? –

+0

в вашем изображенииPickerController * func *: Почему вы выполняете 'performSegue' и' present'? Вы должны сделать только один из них. Вы не можете сразу перейти на 2-х мониторный контроллер. – Honey

ответ

1

Попробуйте

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
    { 
     if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 

     newImageView.contentMode = .scaleAspectFit 
     newImageView.image = chosenImage 

     picker.dismiss(animated: true, completion: nil) 

     let svc = self.storyboard!.instantiateViewController(withIdentifier: "demoViewController") as! demoViewController 
     svc.newphoto = chosenImage 
     self.present(svc, animated: true, completion: nil) 
    } 
} 
+2

Хорошо, но вы должны _explain_. – matt

+0

дает ошибку 'использование неразрешенного идентификатора' imgpass '' –

+0

@Alvin благодарит. это сработало. –

1

Проблема заключается в том, что ваша func prepare(for:sender:) реализация никогда не вызывается, так что ваш newphoto никогда не устанавливается. prepare(for:sender:) отправляется перед переходом. Но нет никакого выхода. Вы представляете в коде, а не с segue.

+0

Также вы не должны делать «настоящее» право после «увольнения». Сделайте 'present' _ в обработчике завершения' 'увольнение'. – matt

+0

при использовании «svc.imgpass = selectedImage» он дает ошибку «Значение типа« demoViewController »не имеет имени« imgpass »« –

+0

О да, понимаете, что я имею в виду. Подумайте сами. Не заставляй нас завязывать тебе обувь. – matt