2016-08-06 2 views
0

내가 2 개 UIViewController의이 : UIImageView과의 ViewController 'B'로함께 충돌 '치명적인 오류 : 예기치 않게 전무 발견'

의 ViewController 'A'라는 이름의 'RERUN_SETUP를' imagePickerController과 함께 'SelectPhotos'라는 이름을 사용했습니다.

ViewController 'A'의 UIImageView에 비어있는 투명 한 UIButton이 있으며 ViewController 'B'가 표시되고 사용자가 카메라 또는 사진에서 사진을 추가하도록 선택할 수 있습니다. 의 ViewController 'A'는의 ViewController 'B'에 선언되어있다,하지만 난의 ViewController 'B'에서의 ViewController 'A', 오류와 함께 응용 프로그램 충돌에 UIImageView을 변경하려고하면

다음

fatal error: unexpectedly found nil while unwrapping an Optional value.

는, 내 코드입니다 도움이 크게 감사합니다 :)

의 ViewController 'A'

class RERUN_SETUP: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverPresentationControllerDelegate { 
//USER PICTURE 
    @IBOutlet weak var RERUNpictureIn: UIImageView? 

//TRANSPARENT BUTTON OVER THE IMAGE VIEW 
@IBAction func imageButton(sender: AnyObject) { 

    let popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("SelectPhotos") 


    popoverContent!.modalPresentationStyle = .Popover 
    popoverContent?.modalTransitionStyle = UIModalTransitionStyle.FlipHorizontal 
    var popover = popoverContent!.popoverPresentationController 

    if let popover = popoverContent!.popoverPresentationController { 

     let viewForSource = sender 
     popover.sourceView = self.view 
     popoverContent!.preferredContentSize = CGSizeMake(100,80) 
     popover.delegate = self 
     popover.permittedArrowDirections = .Any 


    } 

    self.presentViewController(popoverContent!, animated: true, completion: nil) 





} 
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 


    return UIModalPresentationStyle.None 


} 

의 ViewController 'B'

import UIKit 

class SelectPhotos: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
var savedImage = NSUserDefaults.standardUserDefaults().objectForKey("image") 
var imageToSave = UIImage() 
var otherController:RERUN_SETUP = RERUN_SETUP() 

@IBAction func camera(sender: UIButton) { 

    let pickerController = UIImagePickerController() 
    pickerController.delegate = self 
    pickerController.sourceType = UIImagePickerControllerSourceType.Camera 
    pickerController.allowsEditing = true 

    self.presentViewController(pickerController, animated: true, completion: nil) 

} 


@IBAction func photos(sender: AnyObject) { 
    let pickerController = UIImagePickerController() 
    pickerController.delegate = self 
    pickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
    pickerController.allowsEditing = true 

    self.presentViewController(pickerController, animated: true, completion: nil) 


} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 

    self.dismissViewControllerAnimated(true, completion: nil) 

    self.imageToSave = image 

    otherController.RERUNpictureIn!.image = image 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

} 

답변

0

일반적으로이 오류가 발생하면 내게 추가로 "?" 또는 "!" 어딘가에. 또는 나는 어딘가에서 하나를 놓치고있다. 그것들을 어지럽히고 버그가 수정되었는지 확인하십시오.

1

이미지 선택 도구의보기 컨트롤러 B에서 이미지를 nsuserdefault 및 viewconroller에 저장합니다. nsuserdefault에서 해당 이미지를 가져옵니다. 이미지를 설정하십시오. 당신은 이미지

let imageData = NSUserDefaults.standardUserDefaults().objectForKey("image") as! NSData 
imgView.image = UIImage(data: imageData) 
1

당신이 RERUNpictureIn ImageView을 위해 전무을 받고있는 이유를 설정할

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 
    let imageData = UIImagePNGRepresentation(image) 
    NSUserDefaults.standardUserDefaults().setObject(imageData!, forKey: "image") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

하고보기 컨트롤러에

은, 당신이 선언이 그 빈 객체 아직 initalized하지 않은 것입니다 SelectPhotos 컨트롤러 안에 otherController이라는 이름이 붙어 있습니다. 또한 생성 한 개체가 현재 응용 프로그램과 함께 실행중인 개체에 속해 있지 않기 때문에 해당 개체가 도움이되지 않습니다.

이미지를 이전 이미지로 보내려면 delegate/protocol을 사용할 수 있습니다.

먼저 이제 SelectPhotos 컨트롤러 내부 ImageDelegate의 한 객체를 추가 다음과 같이 하나의 프로토콜을 선언하고

protocol ImageDelegate { 
    func getImage(image: UIImage) 
} 

는 이제

class RERUN_SETUP: UITableViewController, ImageDelegate, UIPopoverPresentationControllerDelegate { 

    //Your Code 

    //Implement method of ImageDelegate 
    func getImage(image: UIImage) { 
     self.RERUNpictureIn.image = image 
    } 
} 

내부를 구현하여 RERUN_SETUP 컨트롤러로 구현

import UIKit 

class SelectPhotos: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    var savedImage = NSUserDefaults.standardUserDefaults().objectForKey("image") 
    var imageToSave = UIImage() 
    var delegate: ImageDelegate? 

    @IBAction func camera(sender: UIButton) { 

     let pickerController = UIImagePickerController() 
     pickerController.delegate = self 
     pickerController.sourceType = UIImagePickerControllerSourceType.Camera 
     pickerController.allowsEditing = true 

     self.presentViewController(pickerController, animated: true, completion: nil) 

    } 


    @IBAction func photos(sender: AnyObject) { 
     let pickerController = UIImagePickerController() 
     pickerController.delegate = self 
     pickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
     pickerController.allowsEditing = true 

     self.presentViewController(pickerController, animated: true, completion: nil) 


    } 

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 

     self.imageToSave = image 
     self.delegate.getImage(self.imageToSave) 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

    } 

}  

참고 :보기를 표시하기 위해 SelectPhotos의 객체를 만드는 RERUN_SETUP 컨트롤러 내부에 객체를 표시하기 전에 한 줄을 추가하기 만하면됩니다.

objectOfSelectPhotosThatYouHvaeCreated.delegate = self 
+0

답장을 보내주십시오. –

+0

늦은 답변에 대해 죄송합니다 ... 실제로 지금은 충돌하지 않지만 imageView는 사진을 변경하지 않습니다. – Deyan

+0

SelectPhotos의이 줄은 "SelectPhotos의 값에 'getImage'멤버가 없습니다. self.getImage (self.imageToSave) – Deyan

관련 문제