Я работаю над созданием приложения с 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
, а затем каким-то образом прерывается... но в зависимости от того, как я запрограммировал это, что никогда не должно произойти. Мне любопытно узнать, является ли это общей проблемой, или кто-то еще сталкивался с ней и победил ее. Заранее спасибо!