[当我尝试将保存的数据更新到领域时,它崩溃了,更新时图像变为零

问题描述 投票:0回答:1

[当我保存时,请正常保存。当我尝试更新任何东西时,它在Display ViewController-> cell.circleImag.image时崩溃,而在更新它时,它使该图像变为NIL,但不知道为什么它变成nil并在circleImage.image时崩溃。

我该怎么解决?

保存数据viewController:-

//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)

    }

         @IBAction func saveBtnAction(_ sender: UIButton) {
          let newArray = Items()//Item is realm Data Model
                                            newArray.itemName = itemName.text!
                                             let price = Float(itemPrice.text!)
                                            newArray.price = price!
                                            let cost = Float(itemCost.text!)
                                            newArray.cost = cost!
                                            let barcode = Int(itemBarCode.text!)
                                            newArray.barcCode = barcode!




                                            let stock = Int(itemStock.text!)

                                            if switchBtn.isOn {
                                                newArray.switchBtn = true

                                                newArray.trackStock = stock!
        //
                                            }
                                            else {
                                                newArray.switchBtn = false
        //
                                                newArray.trackStock = 0
                                }

                                //This is used for saving image
                                                       newArray.itemImage = imageData as 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)


        }

显示ViewController:-

  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] {

                cell.circleImag.image = UIImage(data: ((cellItems.itemImage as Data?)!))//Here i am getting error as Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

                    cell.itemName.text = cellItems.itemName
                cell.itemPrice.text = "\(cellItems.price)"+" INR"
                cell.stockCount.text = cellItems.trackStock != 0  ? "\(cellItems.trackStock)"+" in stock" : ""

            }else {
                cell.itemName.text = "No Items Added"
            }


            return cell
           }

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 vc.itemStockVar = String(item.trackStock)
            vc.itemSwitchVar = item.switchBtn

  vc.itemImageVar = UIImage(data: (item.itemImage! as Data?)! )//Here image

}

    func displayItems() {

              itemArray  = realm.objects(Items.self)


            tableView.reloadData()

           }
ios swift uiimageview realm
1个回答
0
投票

发生崩溃是因为您强制拆开可选值。有更好的方法来处理此类情况。例如,使用if let

if let data = cellItems.itemImage as? Data {
    cell.circleImag.image = UIImage(data: data)) 
}

如果您要从UIImage中获取Data,则不应该使用imageData as Data?,而应该使用:

let data = image.pngData()
© www.soinside.com 2019 - 2024. All rights reserved.