Swift: сохранение и извлечение uiimage в coredata

Я хочу сохранить 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 ИЛИ нет. Как я могу это проверить?

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

Двоичные данные - это тип данных, а не UIImage, вы можете преобразовать их в UIImage с помощью UIImage(data:)

Quoc Nguyen 26.10.2018 08:18

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

Rizwan 26.10.2018 08:19

не могли бы вы предоставить мне полный код? Спасибо

Krunal Nagvadia 26.10.2018 08:20

См. Раздел ответов. Сообщите мне, если это вас устраивает

Rizwan 26.10.2018 08:22

Возможный дубликат Сохранение и получение UIImage в CoreData

Cristik 26.10.2018 08:26

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

ChintaN -Maddy- Ramani 26.10.2018 08:29

@Cristik Я могу быстро найти любой ответ. Ответ находится в Задаче C. Пожалуйста, проверьте и исправьте голосование. Спасибо

Krunal Nagvadia 26.10.2018 08:46
0
7
662
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы получаете ошибку преобразования 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(), вы можете удалить его, если он не используется за пределами части кода, который вы поделили.

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value Отображается эта ошибка. Я думаю, что изображение не сохраняется в CoreData правильно.
Krunal Nagvadia 26.10.2018 08:28

используйте Optional Chaining, чтобы избежать этой ошибки. Пожалуйста, проверьте обновленный ответ.

Rizwan 26.10.2018 08:29

Где необязательная цепочка в обновленном ответе? Вы понимаете разницу между необязательным разворачиванием и необязательным связыванием?

Sharad Chauhan 26.10.2018 08:42

My Bad Я имею в виду необязательную разворачивание с if let. Спасибо за исправление.

Rizwan 26.10.2018 08:44

Ok. ошибка исчезла, но изображение все еще не отображается. Не могли бы вы проверить и сообщить мне, это правильный способ сохранить изображение в CoreData?

Krunal Nagvadia 26.10.2018 08:45

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

UIImage to Data

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

и когда вы получаете

Data to UIImage

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

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

классно. Работает очень исправно. Нажмите кнопку голосования, если вам действительно нравится, спасибо.

Krunal Nagvadia 26.10.2018 08:52

@Ronak - принудительное разворачивание изображения !, может привести к фатальной ошибке, если imge равен нулю. Это не рекомендуемый способ использования optional.

Rizwan 26.10.2018 08:56

Другие вопросы по теме