2015-04-02 2 views

Antwort

3

Sie müssen ein CKAsset erstellen und dieses zu Ihrem Datensatz hinzufügen. Sie können das mit Code wie folgt tun:

-1

Sie sollten den Asset-Werttyp im Dashboard für diesen Wert auswählen.

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

UIImage ist nicht erlaubt Typ auf CKRecord. Ihre beste Option ist, dieses Bild in eine Datei zu schreiben, dann erstellen Sie eine CKAsset und legen Sie das auf dem Datensatz fest.

+0

Wie würde ich in Code das tun? –

1

Hier ist etwas ähnlich zu Edwins Antwort, aber ein wenig kompakter. Ich habe das getestet und es funktioniert gut.

Dieses Beispiel speichert "myImage" UIImageView in "mySaveRecord" CKRecord, ersetzen Sie diese Namen durch Ihre jeweiligen.

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

Diese Antwort arbeitet mit Swift 2.2 & iOS 9 und trennt die Erstellung der Datei aus dem Upload, so dass Sie richtig gegen beide testen können, da sie verschiedene Aktionen mit ihren eigenen möglichen Problemen sind.

Für die Funktion uploadPhoto ist die Variable recordType der Wert, den Sie in Ihrem CloudKit-Dashboard verwenden. Die Schaltfläche "Foto" in der Zeile photo["photo"] = asset ist der Feldname für Ihren Datensatztyp.

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 
} 

Sie können dies nennen mit den folgenden:

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