2017-11-10 2 views
0

내가 prepareforSegue스위프트 3~

에 의해 2 UIViewControlleler에 내 코드를 1 UIViewController에서 이미지를 전달하는 데 노력하고 하나 개의 ViewController에서 이미지를 통과 할 수 없습니다 : -

extension ViewController:UIImagePickerControllerDelegate,UINavigationControllerDelegate { 
func handleImg() { 
    let picker = UIImagePickerController() 
    picker.delegate = self 
    picker.allowsEditing = true 
    present(picker, animated: true, completion: nil) 
} 
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    var selectedImageFromPicer : UIImage? 
    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage { 
     selectedImageFromPicer = editedImage 
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage { 

     selectedImageFromPicer = originalImage 
    } 

    if let selectedImage = selectedImageFromPicer { 
     imgg.image = selectedImage 
    } 
    guard let imageUrl = info["UIImagePickerControllerImageURL"] as? URL else { 
     return 
    } 
    self.performSegue(withIdentifier: "selected", sender: self) 
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     print("canceled picker") 
     dismiss(animated: true, completion: nil) 
    } 
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "selected" { 
     let vc = segue.destination as! secondVC 
     vc.img.image = self.imgg.image 

    } 
} 

내가 오류를 얻고있다 라인 vc.img.image = self.imgg.image

오류

fatal error: unexpectedly found nil while unwrapping an Optional value

+0

HTTPS에

그리고있는 viewDidLoad()에서 var image: UIImage? = nil 설정 이미지를 선언 변경 /stackoverflow.com/questions/31576232/passing-image-to-another-view- controller-swift 및 nil이 아닌 데이터를 확인하십시오. if-let을 사용하여 nil 값을 처리 할 수 ​​있습니다. –

+0

"select"라는 스토리 보드에서 segue를 확인하고 대상보기 컨트롤러의 유형 (코드에 따라 "secondVC")을 확인하십시오. 그것은 vc가 0이 아니기 때문일 수 있습니다. – Eridana

+0

시도 vc.img = self.imgg 대신 – YinKiet

답변

0

당신 self.imgg.image가 nil이므로 오류가 발생합니다. 이 같은 비어 있지 않은 경우에 따라서는 imgg 설정됩니다

if let selectedImage = selectedImageFromPicer { 
    imgg.image = selectedImage 
} 

하지만이 코드가 실행되지 않을 경우, 다음 예기치 않게 전무을 발견 오류가 발생 무슨.

그래서 당신이 두 번째 VC 위해 그것을 설정하는 경우, 먼저가 null가 아닌 경우 확인하고는 다음과 같이 설정하십시오 :

vc.img.image = self.imgg.image 
+0

작동하지 않습니다 확인했다' vc.img.image = self.imgg.image ' –

+0

는 그냥 전무 확인을 이해할 수 없다 –

0

타입있는 UIImage의 secondVC과의 첫 번째의 ViewController 세트 이미지에서 변수를 만듭니다 그 변수

secondVC의 뷰가 아직 메모리에 생성되지 않았기 때문에이 예외가 발생합니다./:

그래서 FirstVC에서 다음과 같이 변경

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "selected" { 
     let vc = segue.destination as! secondVC 
     vc.image = self.imgg.image 

    } 
} 

을 적용 secondVC에서 적용 다음은

가 이미지 뷰

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.img.image = image 
} 
+0

작동하지 않습니다 –

+0

이것을 구현 한 후에도 동일한 예외가 발생합니까? – Priya

+0

이미지가 두 번째로 표시되지 않음 vc –