Получение ошибки «Вы хотите добавить заглушки протокола?»

Я добавил протокол ImageView. Что можно сделать, чтобы убрать ошибку

Вы хотите добавить заглушки протокола?

КартыВьюКонтроллер

import UIKit

protocol ImageViewProtocol{ 
    func sendImageToViewController(theImage: UIImage) 
}

class CardsViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, ImageViewProtocol {
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var locationTextField: UITextField!
    @IBOutlet weak var imageView: UIImageView!

    @IBAction func goToViewController2Action(_ sender: Any)
    {
        let viewcontroller2 = storyboard?.instantiateViewController(withIdentifier: "viewController2") as! ViewController2
        viewcontroller2.delegate = self
        self.navigationController?.pushViewController(viewcontroller2, animated: true)
    }

    func chooseImagePickerAction(source: UIImagePickerController.SourceType) {
        if UIImagePickerController.isSourceTypeAvailable(source) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.allowsEditing = true
            imagePicker.sourceType = source
            self.present(imagePicker, animated: true, completion: nil)
        }
    }

    @IBAction func saveButtonPressed(_ sender: UIBarButtonItem) {
        if nameTextField.text == "" || locationTextField.text == "" || textField.text == "" {
            print("Not all fields are filled")
        } else {
            if let context = (UIApplication.shared.delegate as? AppDelegate)?.coreDataStack.persistentContainer.viewContext {
                let card = Card(context: context)
                card.name = nameTextField.text
                card.location = locationTextField.text
                card.number = textField.text
                if let image = imageView.image {
                    card.image = image.pngData()
                }
                do {
                    try context.save()
                    print("Cохранение удалось!")
                } catch let error as NSError {
                    print("Не удалось сохранить данные \(error), \(error.userInfo)")
                }
            }

            performSegue(withIdentifier: "unwindSegueFromNewCard", sender: self)
        }
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        imageView.image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        dismiss(animated: true, completion: nil)
    }
}

ViewController2

import UIKit

class ViewController2: UIViewController {
    var filter : CIFilter!
    var delegate: ImageViewProtocol!

    @IBOutlet weak var select: UISegmentedControl!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var barcodeImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        barcodeImageView.image = UIImage(named: "photo")
    }

    @IBAction func saveButtonAction(_ sender: Any) {
        if textField.text == "" {
            print("Not all fields are filled")
        } else {
            delegate.sendImageToViewController(theImage: barcodeImageView.image!)
            self.navigationController?.popViewController(animated: true)
        }
        performSegue(withIdentifier: "unwindSegueFromViewController", sender: sender)
    }

    @IBAction func tappedEnter(_ sender: Any) {
        if textField.text?.isEmpty ?? true {
            return
        } else {
            if let texttxt = textField.text {

                let data = texttxt.data(using: .ascii, allowLossyConversion: false)

                if select.selectedSegmentIndex == 0
                {
                    filter = CIFilter(name: "CICode128BarcodeGenerator")
                } else {
                    filter = CIFilter(name: "CIQRCodeGenerator")
                }

                filter.setValue(data, forKey: "inputMessage")
                let transform = CGAffineTransform(scaleX: 5, y: 5)
                let image = UIImage(ciImage: filter.outputImage!.transformed(by: transform))
                barcodeImageView.image = image
            }
        }
    }
}

person Day Man    schedule 01.12.2018    source источник
comment
Вы действительно добавили протокол, но никто не реализует его метод.   -  person Larme    schedule 01.12.2018


Ответы (1)


Эта ошибка возникает из-за того, что вы реализовали протокол (ImageViewProtcol), но не добавили необходимые методы вашего протокола (в вашем случае sendImageToViewController(theImage: UIImage)). Все методы вашего протокола являются обязательными по умолчанию. Если вы хотите изменить его, вы можете посмотреть здесь.

Это то же самое, что и при реализации UITableViewDataSource, вам также нужно добавить необходимые методы, такие как количество элементов и т. д.

Чтобы исправить это, добавьте этот метод в свой CardsViewController:

func sendImageToViewController(theImage: UIImage) {
    // do something with image
}
person Robert Dresler    schedule 01.12.2018