I use UIImagePickerController to get image from phone library (iOS). After edit mode i put image to my UIImageView. I want to save this image in Core Data to use it in anoth
You can store images in Core Data using the Binary Data attribute type. Then change your image from the picker to NSData.
Then just save it like anything else.
However you should be aware of a few things:
Always convert your UIImage to a NSData Format
If you run into performance issues, try moving the Binary Data attribute to a separate entity.
You should abstract the conversion to NSData behind the interface of your NSManagedObject subclass, so you don't have to worry about conversions from UIImage to NSData or vice versa.
If your images are not strongly related to the entities in your model, I would suggest storing them outside of Core Data.
Example :
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
self.dismissViewControllerAnimated(true, completion: nil)
newImageData = UIImageJPEGRepresentation(image, 1)
}
myImageFromData = UIImage(data: newImageData)
Another good option is you can save your Image into Document Directory of your app and you can retrieve that image from anywhere like shown in below code:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
self.dismissViewControllerAnimated(true, completion: nil)
let tempImage = info[UIImagePickerControllerOriginalImage] as! UIImage
// save your image here into Document Directory
saveImage(tempImage, path: fileInDocumentsDirectory("tempImage"))
}
Here is the helper functions:
func saveImage (image: UIImage, path: String ) -> Bool{
let pngImageData = UIImagePNGRepresentation(image)
//let jpgImageData = UIImageJPEGRepresentation(image, 1.0) // if you want to save as JPEG
let result = pngImageData.writeToFile(path, atomically: true)
return result
}
// Get the documents Directory
func documentsDirectory() -> String {
let documentsFolderPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
return documentsFolderPath
}
// Get path for a file in the directory
func fileInDocumentsDirectory(filename: String) -> String {
return documentsDirectory().stringByAppendingPathComponent(filename)
}
And this way you can retrieve that image from Document Directory:
@IBAction func setImage(sender: AnyObject) {
imageV.image = loadImageFromPath(fileInDocumentsDirectory("tempImage"))
}
And here is the helper function:
func loadImageFromPath(path: String) -> UIImage? {
let image = UIImage(contentsOfFile: path)
if image == nil {
println("missing image at: (path)")
}
println("\(path)") // this is just for you to see the path in case you want to go to the directory, using Finder.
return image
}
Hope It will help you.