получить URL-адрес для NSData, сохраненного в CoreData

Я сохраняю UIImage в Core Data. Итак, сначала я конвертирую его в NSData, а затем сохраняю.

Мне нужно получить URL-адрес изображения после его сохранения. Я делаю это, потому что хочу запланировать локальное уведомление с вложением, и единственный способ сделать это, AFAIK, - это указать URL-адрес.

Вот мой код:

//my image:  
var myImage: UIImage?
var imageData: NSData?
    if let image = myImage {
    imageData = UIImageJPEGRepresentation(image, 0.5)! as NSData
}
myEntity.setValue(imageData, forKey: "image")

Вот так я должен добавить вложение к уведомлению:
UNNotificationAttachment.init(identifier: String, url: URL>, options: [AnyHashable : Any]?)

Я сохраняю изображение и планирую уведомление вручную, когда пользователь нажимает кнопку, чтобы сохранить изображение.

Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.


person MEnnabah    schedule 07.05.2017    source источник
comment
Сохраните изображение локально и сохраните его URL-адрес в CoreData.   -  person Leo Dabus    schedule 07.05.2017
comment
UIMagagedDocument кажется подклассом UIDocument, который использует базовые данные и инициируется с URL-адреса для получения контекста. Я не очень знаком с этим, но вы можете изучить его.   -  person Antonia Zhang    schedule 29.12.2018


Ответы (2)


Вы не можете получить URL-адрес. Если вы настроили это свойство для использования внешнего хранилища, тогда да, технически может быть URL-адрес файла. Может быть. Но нет документированного способа получить его, и в любом случае он может не существовать в конце концов - потому что параметр внешнего хранилища не требует, чтобы Core Data использовал внешнее хранилище, он просто позволяет ему это делать.

Если вы не использовали этот параметр, то URL-адреса никогда не будет, поскольку изображение сохраняется как часть файла SQLIte.

Если вам нужен URL-адрес файла для изображения, сохраните изображение в файл отдельно от Core Data и сохраните имя файла как свойство объекта. Тогда URL-адрес файла будет там, где вы сохранили файл.

person Tom Harrington    schedule 07.05.2017
comment
Спасибо, Том, я понял. - person MEnnabah; 09.05.2017
comment
Я отправляю данные, сохраненные в Core Data, в CloudKit. Как вы думаете, это правильный способ использовать URL-адрес CKAsset в уведомлении? Прошу прощения, если это не связано с главным вопросом. - person MEnnabah; 09.05.2017
comment
Я почти не использовал CloudKit, поэтому точно сказать не могу. - person Tom Harrington; 09.05.2017

И реализация того, как я сохранил его, а затем получил URL на практике, когда у меня была такая же проблема:

Swift 5:

 func getImageURL(for image: UIImage?) -> URL {
            let documentsDirectoryPath:NSString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
            let tempImageName = "tempImage.jpg"
            var imageURL: URL?

            if let image = image {

                let imageData:Data = image.jpegData(compressionQuality: 1.0)!
                let path:String = documentsDirectoryPath.appendingPathComponent(tempImageName)
                try? image.jpegData(compressionQuality: 1.0)!.write(to: URL(fileURLWithPath: path), options: [.atomic])
                imageURL = URL(fileURLWithPath: path)
                try? imageData.write(to: imageURL!, options: [.atomic])
            }
            return imageURL!
        }
person Steve B    schedule 19.02.2020