【发布时间】:2016-07-24 17:56:34
【问题描述】:
我正在使用 Swift 创建一个应用程序,该应用程序将使用 CloudKit 和 Core Data 保存和检索图像。使用 CloudKit,我将图像保存为 CKAsset,使用 Core Data,我将图像保存在文档目录中,然后将路径名存储在 Core Data 中。当我的应用程序开始加载时,它会首先查找本地存储的任何项目,然后检查云是否没有存储本地数据(节省大量加载时间)。无论如何,当我从CloudKit 加载图像时它们很好,Core Data 和文档目录路径大部分时间也是如此。当使用它们的路径名在Core Data 中加载图像时,我会定期注意到这个问题,基本上图像只是部分返回,其中一些是灰色的,好像它停止绘制 85% 的路径或其他东西。很难找到一个很好的例子,因为它不会一直发生,但这是我能找到的最好的猫:
看到顶部的图像大约有 15% 是灰色的吗?它永远不会定位到图像的任何特定部分,发生在顶部、左侧、右侧、底部,甚至中间。就像我说的那样,这根本不是一个长期问题。这是我的代码,用于将图像存储在documents目录中,并将路径名保存在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 异步加载的图像,然后以某种方式被中断.. .但基于我如何编程它不应该发生。我很好奇这是否是一个常见问题,或者是否有其他人经历过并克服了它。提前谢谢!
【问题讨论】:
-
您找到解决方案了吗?我在通知扩展中看到了同样的事情。
-
嘿山姆。你知道我还没有找到解决这个问题的方法。我注意到它发生的次数少了。我最终将我所有的核心数据操作更改为异步完成,现在它很少发生,但是它仍然在发生。我一直在努力解决它,但它仍然让我发疯。
标签: ios swift core-data uiimage nsdocumentdirectory