我正在使用Swift创建一个应用程序,它将使用CloudKit
和Core Data
保存和检索图像。使用CloudKit,我将图像保存为CKAsset
并使用Core Data
将图像保存在文档目录中,然后将路径名称存储在Core Data
中。当我的应用程序开始加载时,它将首先查找本地存储的任何项目,然后检查云是否存储本地数据(节省大量加载时间)。无论如何,当我从CloudKit
加载图像时,它们都很好,而Core Data
和文档目录路径大部分时间都是相同的。当我在Core Data
使用他们的路径名加载图像时,我一直在注意这个问题,基本上图像仅部分返回,其中一些是灰色的,好像它停止了85%的通过或者某些东西。很难找到一个很好的例子,因为它不会一直发生,但这是我能找到的最好的猫:
看看顶部大约15%的图像是灰色的?它从未本地化到图像的任何特定部分,发生在顶部,左侧,右侧,底部,甚至在中间。就像我说的那样,这根本不是一个长期问题。这是我用于将图像存储在文档目录中的代码,并将路径名保存在Core Data
中:
// 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!
}
然后在加载应用程序后,这是我用来检索图像路径名的代码,然后从文档目录中获取图像:
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
}
如果有人对如何解决这个问题有任何好的想法,或者甚至想知道为什么会这样,我会非常感激。我的第一个想法是,因为我正在使用CloudKit
和Core Data
,这可能在某些时候我的应用程序正在保存正在通过CloudKit
异步加载的图像,并且然后以某种方式中断...但基于我如何编程它不应该发生。我很想知道这是否是一个常见的问题,或者是否有其他人经历过并征服过它。提前谢谢!
答案 0 :(得分:0)
我在通知扩展中找到了这个,我不得不做这样的事情。不知道为什么。
Observable.FromEvent*