Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- import CloudKit
- class CloudManager {
- private static let privateCloudDatabase = CKContainer.default().publicCloudDatabase
- static func saveDataToCloud(place: Place, with image: UIImage) {
- let (image, url) = prepareImageToSaveToCloud(place: place, image: image)
- guard let imageAsset = image, let imageURL = url else { return }
- let record = CKRecord(recordType: "Place")
- record.setValue(place.name, forKey: "name")
- record.setValue(place.location, forKey: "location")
- record.setValue(place.type, forKey: "type")
- record.setValue(place.rating, forKey: "rating")
- record.setValue(imageAsset, forKey: "imageData")
- privateCloudDatabase.save(record) { (_, error) in
- if let error = error { print(error); return }
- deleteTempImage(imageURL: imageURL)
- }
- }
- // MARK: Private Methods
- private static func prepareImageToSaveToCloud(place: Place, image: UIImage) -> (CKAsset?, URL?) {
- let scale = image.size.width > 1080 ? 1080 / image.size.width : 1
- let scaleImage = UIImage(data: image.pngData()!, scale: scale)
- let imageFilePath = NSTemporaryDirectory() + place.name
- let imageURL = URL(fileURLWithPath: imageFilePath)
- guard let dataToPath = scaleImage?.jpegData(compressionQuality: 1) else { return (nil, nil)}
- do {
- try dataToPath.write(to: imageURL, options: .atomic)
- } catch {
- print(error.localizedDescription)
- }
- let imageAsset = CKAsset(fileURL: imageURL)
- return (imageAsset, imageURL)
- }
- static private func deleteTempImage(imageURL: URL) {
- do {
- try FileManager.default.removeItem(at: imageURL)
- } catch {
- print(error.localizedDescription)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement