Когда я пытаюсь обновить сохраненные данные в области, она падает, изображение становится нулевым при обновлении - PullRequest
1 голос
/ 24 октября 2019

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

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

Что я могу сделать, чтобы решить эту проблему?

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

Отображение 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] {

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

           }

1 Ответ

1 голос
/ 24 октября 2019

Сбой происходит из-за принудительного развертывания необязательного значения. Есть лучшие способы справиться с такими случаями. Например, используя if let:

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

И если вы хотите получить Data из UIImage, вам не следует использовать imageData as Data?, а:

let data = image.pngData()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...