Swift: сохранение и получение UIImage в CoreData - PullRequest
0 голосов
/ 26 октября 2018

Я хочу сохранить UIImage, который я получаю из UIImagePickerCollector, в атрибут CoreData "img", который является типом двоичных данных.Я просто пытаюсь сохранить, используя следующий код:

let sampleimage = profileimg?.image
    var dataImage: Data? = nil
    if let aSampleimage = sampleimage {
        dataImage = aSampleimage.jpegData(compressionQuality: 0.0)
    }

    let imag = Data()

    let newUser = NSEntityDescription.insertNewObject(forEntityName: "Person", into: Constant.context!)

    newUser.setValue(self.txtName!.text, forKey: Constant.CDName)
    newUser.setValue(self.txtEmail!.text, forKey: Constant.CDEmail)
    newUser.setValue(self.txtPassword!.text, forKey: Constant.CDPassword)
    newUser.setValue(yourDate, forKey: Constant.CDDob)
    newUser.setValue(imag, forKey: Constant.CDImage)

Когда я пытаюсь запустить его, не показывая никакой ошибки.Но я не знаю, изображение сохраняется в CoreData ИЛИ нет.Как я могу проверить это?

И когда я пытаюсь назначить изображение в мою ячейку табличного представления, это показывает мне следующую ошибку.Пожалуйста, докажите правильное решение.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Если вы хотите сохранить изображение, вы можете установить поле как Двоичные данные, и вам нужно преобразовать и сохранить в базовые данные

UIImage to Data

if image != nil{
   let data = UIImagePNGRepresentation(image!)
}

и когда вы выбираете

Данные в UIImage

if data != nil{
   let image = UIImage(data:data)
}

, вот так вы должны создать объект сущности coredata, а затем создатьполе в виде двоичных данных и сохранить данные UIImage, а когда вы хотите извлечь, затем снова нужно преобразовать из данных в изображение и назначить для вашего UIImageview.

0 голосов
/ 26 октября 2018

Вы получаете ошибку преобразования NSData в UIImage. Попробуйте использовать UIImage(data:imageData,scale:1.0) при условии, что масштаб изображения равен 1.

Для вашего кода это может быть что-то вроде:

if let imgData = obj.img {
    cell.listImg.image = UIImage(data:imgData, scale:1.0) //presuming the image's scale is 1
}

Другой вариант может быть

if let imgData = obj.img {
    cell.listImg.image = UIImage(data: imgData)
}

Сохранение изображения. В операторе newUser.setValue(imag, forKey: Constant.CDImage) вы используете imag, однако фактическое изображение содержится в dataImage. Пожалуйста, исправьте это

newUser.setValue(imag, forKey: Constant.CDImage)

до

newUser.setValue(dataImage, forKey: Constant.CDImage)

Также для общего кода, отсекаемого, я не вижу никакого смысла в let imag = Data(), вы можете удалить его, если он не используется вне той части кода, которой вы поделились.

...