Wie lade ich Bilder aus dem Cloud-Kit mit swift hoch und lade sie zurück?Wie Bilder mit Cloud-Kit mit Swift hochladen?
Welchen Attributtyp verwende ich?
Welche Code verwende ich? Dies ist der Code, den ich derzeit verwende ...
Wie lade ich Bilder aus dem Cloud-Kit mit swift hoch und lade sie zurück?Wie Bilder mit Cloud-Kit mit Swift hochladen?
Welchen Attributtyp verwende ich?
Welche Code verwende ich? Dies ist der Code, den ich derzeit verwende ...
Sie müssen ein CKAsset erstellen und dieses zu Ihrem Datensatz hinzufügen. Sie können das mit Code wie folgt tun:
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.
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!
}
})
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")
Wie würde ich in Code das tun? –