2015-04-02 19 views
6

Görüntüleri bulut kitinden hızlı bir şekilde nasıl yüklerim ve yüklerim?Görüntüleri, hızlı kullanarak bulut kiti ile nasıl yükleyebilirim?

Hangi öznitelik türünü kullanırım?

Ne kodu kullanırım? Şu anda kullandığım kod ...

func SaveImageInCloud(ImageToSave: UIImage) { 
     let newRecord:CKRecord = CKRecord(recordType: "ImageRecord") 
     newRecord.setValue(ImageToSave, forKey: "Image") 

     if let database = self.privateDatabase { 


      database.saveRecord(newRecord, completionHandler: { (record:CKRecord!, error:NSError!) in 

       if error != nil { 

       NSLog(error.localizedDescription) 

       } 


       else { 

        dispatch_async(dispatch_get_main_queue()) { 

println("finished") 

        } 
       } 
     }) 
     } 

cevap

3

Bir CKAsset oluşturmanız ve bunu kaydınıza eklemeniz gerekir. Bunu şu kodla yapabilirsiniz:

func SaveImageInCloud(ImageToSave: UIImage) { 
    let newRecord:CKRecord = CKRecord(recordType: "ImageRecord") 

    let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory 
    let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask 
    if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) { 
     if paths.count > 0 { 
      if let dirPath = paths[0] as? String { 
       let writePath = dirPath.stringByAppendingPathComponent("Image2.png") 
       UIImagePNGRepresentation(ImageToSave).writeToFile(writePath, atomically: true) 

       var File : CKAsset? = CKAsset(fileURL: NSURL(fileURLWithPath: writePath)) 
       newRecord.setValue(File, forKey: "Image") 

      } 
     } 
    } 

    if let database = self.privateDatabase { 
     database.saveRecord(newRecord, completionHandler: { (record:CKRecord!, error:NSError!) in 
      if error != nil { 
       NSLog(error.localizedDescription) 
      } else { 
       dispatch_async(dispatch_get_main_queue()) { 
        println("finished") 
       } 
      } 
     }) 
    } 
-1

Bu değer için gösterge tablosundaki Öğe değer türünü seçmek istersiniz.

newRecord.setValue(ImageToSave, forKey: "Image")

UIImage CKRecord üzerinde izin verilen bir türde değil. En iyi seçeneğiniz bu görüntüyü bir dosyaya yazmak, daha sonra bir CKAsset oluşturmak ve bu kaydı ayarlamaktır.

+0

Nasıl kodunda ki? –

1

İşte Edwin'in yanıtına benzer bir şey ama biraz daha kompakt. Bunu test ettim ve iyi çalışıyor.

Bu örnekte "myImage" UIImageView "mySaveRecord" CKRecord'a kaydediliyor, sadece bu isimleri kendi isimlerinizle değiştirin.

let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String 
let imageFilePath = documentDirectory.stringByAppendingPathComponent("lastimage") 
UIImagePNGRepresentation(myImage).writeToFile(imageFilePath, atomically: true) 
let asset = CKAsset(fileURL: NSURL(fileURLWithPath: imageFilePath)) 
mySaveRecord.setObject(asset, forKey: "ProfilePicture") 
CKContainer.defaultContainer().publicCloudDatabase.saveRecord(mySaveRecord, completionHandler: { 
    record, error in 
    if error != nil { 
     println("\(error)") 
    } else { 
     //record saved successfully! 
    } 
}) 
0

Bu cevap Swift 2.2 & iOS 9 ile çalışır, ve kendi sorun yaratabilecek farklı eylemler olduğundan düzgün, hem karşı test edebilirsiniz böylece yükleme dosya oluşturma ayırır.

UploadPhoto işlevi için, recordType değişkeni, CloudKit kontrol panelinizde kullandığınız değerdir. photo["photo"] = asset satırındaki "fotoğraf" tuşu, kayıt türünüzün alan adıdır.

func uploadPhoto(image: UIImage, recordName: String) { 
    let privateDB = CKContainer.defaultContainer().privateCloudDatabase 
    let photoID = CKRecordID(recordName: recordName) 
    let photo = CKRecord(recordType: recordType, recordID: photoID) 
    let asset = CKAsset(fileURL: writeImage(image)) 
    photo["photo"] = asset 

    privateDB.saveRecord(photo) { (record, error) in 
     guard error == nil else { 
      print(error?.localizedDescription) 

      return 
     } 
     print("Successful") 
    } 
} 

func writeImage(image: UIImage) -> NSURL { 
    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! 
    let fileURL = documentsURL.URLByAppendingPathComponent(NSUUID().UUIDString + ".png") 
    if let imageData = UIImagePNGRepresentation(image) { 
     imageData.writeToURL(fileURL, atomically: false) 
    } 

    return fileURL 
} 

Bunu şu şekilde arayabilirsiniz:

uploadPhoto(UIImage(named: "foo.png")!, recordName: "bar")