当我保存它时,它会正常保存。 当我尝试更新任何东西时,图像变为零并显示空白图像和 当我执行拍照 Action 时剩余数据变为零,只需打开相机剩余数据将变为零。
主要问题是为什么图像在更新时变为零,其余的都保持不变。只有图像将为空。
我该怎么做才能解决这个问题?
//Navigation and ImagePicekrDelegate are for camera
var imagePicker: UIImagePickerController!
@IBOutlet weak var showImage: UIImageView!
var itemImageVar :UIImage? {
didSet{
}
}
override func viewWillAppear(_ animated: Bool) {
showImage.image = itemImageVar
}
//TODO: Saving image Here
var imageData:Data?
//Select Picture
@IBAction func choosePhotAction(_ sender: UIButton) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary //This is for opening photo library
present(imagePicker, animated: true, completion: nil)
}
@IBAction func takePhotoActionw(_ sender: UIButton) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let imageViewer = info[UIImagePickerController.InfoKey.originalImage] {
imagePicker.dismiss(animated: true,completion: nil)
showImage.image = imageViewer as! UIImage
saveImage(image: imageViewer as! UIImage)
}
}
func saveImage(image : UIImage) {
imageData = (image as! UIImage).jpegData(compressionQuality: 100)
print(imageData)
}
@IBAction func saveBtnAction(_ sender: UIButton) {
let newArray = Items()//Item is realm Data Model
newArray.itemName = itemName.text!
if let data = imageData as Data? {
newArray.itemImage = data
}
newArray.dateWise = Date()
//MARK: Realm data
//Creating/saving data here
if saveFlag == true {
//This will go to Create data and save
self.saveItems(item: newArray)
} else {
newArray.id = idVar!
self.updateItems(item: newArray)
}
self.navigationController?.popViewController(animated: true)
}
func saveItems(item: Items) {
do {
try realm.write { //Save/Create
realm.add(item)
}
} catch {
print("Error in saving \(error)")
}
}
func updateItems(item: Items) {
do {
try realm.write {//Save/Create
realm.add(item, update: .modified)
}
} catch {
print("Error in saving \(error)")
}
}
//Read the data after saving like displying again
func displayItems() {
itemArray = realm.objects(Items.self)
}
显示 View Controller :-
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "ItemDispplayCell", for: indexPath) as! ItemDispplayCell
if let cellItems = itemArray?[indexPath.row] {
if let data = item.itemImage as Data? {
cell.circleImag.image = UIImage(data: data)
}
}else {
cell.itemName.text = "No Items Added"
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let item = itemArray?[indexPath.row] {
if let data = item.itemImage as Data? {
vc.imageVar = UIImage(data: data)
}
}
func displayItems() {
itemArray = realm.objects(Items.self)
tableView.reloadData()
}
最佳答案
发生崩溃是因为您强行解包可选值。有更好的方法来处理这种情况。例如使用 if let
:
if let data = cellItems.itemImage as? Data {
cell.circleImag.image = UIImage(data: data))
}
如果你想从 UIImage 获取 Data
,你不应该使用 imageData as Data?
而是:
let data = image.pngData()
关于ios - 当我尝试将保存的数据更新到 Realm 时它崩溃了,图像在更新时变为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539393/