Использование Cloudkit Assets в качестве UIimage
У меня есть изображения, сохраненные в CloudKit в качестве актива. Есть и другие атрибуты для каждой записи. Я могу собрать запись и использовать другие атрибуты, но я не могу использовать актив в моем ImageView. Я новичок в программировании Swift, поэтому ошибка, которую я получаю, не имеет никакого смысла.
let container = CKContainer.default()
let publicDB = container.publicCloudDatabase
let query1 = CKQuery(recordType: "movieArray", predicate: predicate2)
publicDB.perform(query1, inZoneWith: nil) {(results:[CKRecord]?, error:Error?) in
if error != nil {
DispatchQueue.main.async {
print("Cloud Query Error - Fetch Establishments: \(String(describing: error))")
}
return
}
for record in results! {
DispatchQueue.main.async {
let asset = record["myImageKey"] as? CKAsset
let data = NSData(contentsOf: (asset?.fileURL)!)
let image = UIImage(data: data! as Data)
print("Test")
self.detailImage.image = image
}
self.movieCast.text = record.object(forKey: "Actors") as? String
self.detailDescriptionLabel.text = record.object(forKey: "Description") as? String
let youLink = record.object(forKey: "youtubeTag") as! String
self.loadYoutube(videoID: youLink)
}
}
Я получаю ошибку в этой строке:
let data = NSData(contentsOf: (asset?.fileURL)!)
это говорит:
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1020527c4
Я попытался удалить его из основного потока, но получаю ту же ошибку.
1 ответ
Решение
Может быть, проблема в том, что CKAsset
запись равна нулю, но вы вынуждены иметь fileURL
значение.
Попробуйте получить изображение CloudKit с помощью этого фрагмента
if let asset = record["myImageKey"] as? CKAsset,
let data = try? Data(contentsOf: (asset.fileURL)),
let image = UIImage(data: data)
{
self.detailImage.image = image
}