2016-08-06 1 views
0

「致命的なエラーが予期せずnilを見つけ」私は2 UIViewController秒を持っていますimagePickerControllerで「SelectPhotos」と命名されました。変更UIImageViewイメージでクラッシュ</p> <p>のViewController <code>UIImageView</code>とViewControllerを「B」との「」という名前の「RERUN_SETUP」:

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 '

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から取得します。画像を設定します。

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

、あなたがイメージ

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

あなたがRERUNpictureIn ImageViewにnilを得ている理由を設定したいあなたのビューコントローラでは、それはあなたが宣言してきたその空のオブジェクトのためにまだinitalizedていないということですSelectPhotosコントローラ内にotherControllerという名前が付けられています。作成したオブジェクトが現在アプリケーションで実行されているオブジェクトに属していないため、このオブジェクトも役に立ちません。

画像を前の画像に送信するには、delegate/protocolを使用します。

まず今すぐあなたのSelectPhotosコントローラ

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() 

    } 

}  
ImageDelegateの一つのオブジェクトを追加するには、

class RERUN_SETUP: UITableViewController, ImageDelegate, UIPopoverPresentationControllerDelegate { 

    //Your Code 

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

の内側にそれを実装し、このように1つのプロトコルを宣言し、あなたのRERUN_SETUPコントローラ

protocol ImageDelegate { 
    func getImage(image: UIImage) 
} 

を実装

注:ビューを表示するためにSelectPhotosオブジェクトを作成するコントローラRERUN_SETUPの中に、オブジェクトを表示する前に1行追加するだけです。

objectOfSelectPhotosThatYouHvaeCreated.delegate = self 
+0

ご回答ありですか? –

+0

遅く返事をおかけして申し訳ありません...実際には今はクラッシュしませんが、画像ビューは画像を変更しません。 – Deyan

+0

SelectPhotosのこの行にエラーが表示される "SelectPhotosの値に 'getImage'というメンバーがありません self.getImage(self.imageToSave) – Deyan

関連する問題