2016-04-05 15 views
2

Her ikisi de CloudKit ve Core Data kullanarak görüntüleri kaydedip alacak olan Swift ile bir uygulama oluşturmaya çalışıyorum. CloudKit ile görüntüyü CKAsset olarak kaydedeceğim ve Core Data ile görüntüyü belgeler dizinine kaydedip yol adını Core Data'da saklayacağım. Uygulamam yüklenmeye başladığında, önce yerel olarak depolanan öğeleri arar, ardından yerel veriler saklanmazsa bulutu kontrol eder (çok fazla yükleme süresi kaydeder). Her neyse, görüntüleri CloudKit'dan yüklediğimde, bunlar iyi ve Core Data için de geçerli oluyor ve belge dizini yolu çoğu zaman. Görüntülerin Core Data içinde yol adlarını kullanarak yüklendiğinde bu problemi düzenli olarak fark ettim, aslında görüntü yalnızca kısmen geri geliyor, bir kısmı yolun% 85'ini ya da bir şeyleri çizmeyi bırakmış gibi grileşiyor. İyi bir örnek bulmak zordur, çünkü her zaman olmaz, ama benim kedimden bulabildiğim en iyisi: Partial Cat ImageTemel Verilerde Belgeler Dizini'nden Görüntü Yolunu Kaydetme, Yalnızca Kısmi Görüntü Alma. Swift

Üstteki görüntünün yaklaşık% 15'inin sadece gri olduğunu görün ? Hiçbir zaman görüntünün herhangi bir parçasına lokalize edilmez, üstte, solda, sağda, altta hatta ortada olur. Ve söylediğim gibi hiç de kronik bir sorun değil. İşte benim kod Core Data yol adını belgeler dizininde görüntü saklamak ve kaydetmek için kullanılır:

// Make the unique path for the Image Name and save it 
let userImageName:String = "savedUserImage\(indexForImageName).jpg" 
let imagePath = saveInDocumentsDirectory(userImageName) 

// Save the game's reference image in the documents directory 
self.saveImage(user.referenceImage, path: imagePath) 

func saveImage (image: UIImage, path: String) { 

    let jpgImageData = UIImageJPEGRepresentation(image, 1.0) 
    jpgImageData?.writeToFile(path, atomically: true) 

} 

func documentDirectoryURL() -> NSURL { 
    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] 
    return documentsURL 
} 

func saveInDocumentsDirectory(filename: String) -> String { 

    let fileURL = documentDirectoryURL().URLByAppendingPathComponent(filename) 
    return fileURL.path! 

} 

Sonra Uygulamayı daha sonra yükleme üzerine, burada benim resim yolu adlarını almak için kullandıkları kod ve sonra belgeler dizinden resim getirirseniz:

if let image = newUser.imageName { 
    let imagePath = saveInDocumentsDirectory(image) 

    if let loadedImage = loadImageFromPath(imagePath) { 

     user.referenceImage = loadedImage 

    } else { self.customDelegate.alertUserErrorLoadingImage() } 
} 

func loadImageFromPath(path: String) -> UIImage? { 

    let image = UIImage(contentsOfFile: path) 

    if image == nil { 

     self.customDelegate.alertUserErrorLoadingImage() 
    } 

    return image 

} 

herkes bu oluyor neden olarak bu sorunu, hatta bir fikir düzeltme hakkında herhangi iyi fikirler varsa, ben çok iyi olur. İlk düşüncem, CloudKit ve Core Data kullanıyorum bu yana, belki de bir noktada benim uygulama CloudKit ile eşzamansız olarak yükleme sırasında bir görüntü kaydediyor ve sonra nasıl bir şekilde kesiliyor ... ama nasıl Her zaman olmamalı diye programladı. Bunun yaygın bir sorun olup olmadığını, ya da başka birinin tecrübe edip etmediğini merak ediyorum. Şimdiden teşekkür ederim!

+0

Buna bir çözüm buldunuz mu? Aynı şeyi bildirim uzantılarında görüyorum. –

+0

Hey Sam. Bu problem için hala bir çözüm bulamadım. Daha az olsa da gerçekleştiğini fark ettim. Tüm Temel Veri işlemlerini zaman uyumsuz olarak yapmam gerekti ve şimdi nadiren oluyor, ama evet yine de oluyor. Sadece etrafta çalışıyorum ama hala beni çıldırtıyor. – Pierce

cevap

0

Bunu bildirim uzantılarında buldum ve böyle bir şey yapmak zorundaydım. Neden olduğu hakkında bir fikrim yok.

let data = try! Data(contentsOf: attachment.url) 
self.imageView.image = UIImage(data: data) //Must use data, doesn't work right with loading straight into image 
+0

İlginç! Bu cevabı gönderdiğiniz için teşekkür ederiz. Sorunumun giderilip giderilmediğini görmek için bu çözümü kodumda uygulamaya çalışacağım. Seni bilgilendirecegim! – Pierce

İlgili konular