【问题标题】:Saving Image Path From Documents Directory in Core Data, Retrieving Only Partial Image. Swift从核心数据中的文档目录保存图像路径,仅检索部分图像。迅速
【发布时间】:2016-07-24 17:56:34
【问题描述】:

我正在使用 Swift 创建一个应用程序,该应用程序将使用 CloudKitCore 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

}

如果有人对如何解决此问题有任何好的想法,或者甚至知道为什么会发生这种情况,我将不胜感激。我的第一个想法是,由于我使用的是CloudKitCore Data,可能在某些时候我的应用程序正在保存一个正在通过CloudKit 异步加载的图像,然后以某种方式被中断.. .但基于我如何编程它不应该发生。我很好奇这是否是一个常见问题,或者是否有其他人经历过并克服了它。提前谢谢!

【问题讨论】:

  • 您找到解决方案了吗?我在通知扩展中看到了同样的事情。
  • 嘿山姆。你知道我还没有找到解决这个问题的方法。我注意到它发生的次数少了。我最终将我所有的核心数据操作更改为异步完成,现在它很少发生,但是它仍然在发生。我一直在努力解决它,但它仍然让我发疯。

标签: ios swift core-data uiimage nsdocumentdirectory


【解决方案1】:

我在通知扩展中发现了这个,我不得不做这样的事情。不知道为什么。

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

【讨论】:

  • 有趣!感谢您发布此答案。我将尝试在我的代码中实现这个解决方案,看看它是否能解决我的问题。我会告诉你的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 2023-03-03
  • 2023-03-14
  • 1970-01-01
  • 2021-03-23
  • 2016-10-24
  • 1970-01-01
相关资源
最近更新 更多