этот класс не соответствует значению ключа для ключа currentLetter - PullRequest
0 голосов
/ 06 февраля 2020

Я получаю ошибку SIGABRT и нижеуказанную ошибку в консоли:

TraceViewController 0x7fb03a116900> setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для ключа currentLetter

Я перепробовал все, нет неправильных розеток. Я проверил источник представления и currentLetter нигде не существует. Я попытался удалить производные данные и пересобрать проект. В TraceViewController есть переменная с именем currentLetter, которая также меняет все их на cLetter, и я до сих пор получаю точно такую ​​же ошибку, говоря currentLetter. Я не могу найти currentLetter нигде в своем проекте, но продолжаю получать его.

Я не совсем уверен, какой код для загрузки немного сложно показать, хоть какая-нибудь идея, что я мог бы сделать, чтобы решить эту проблему?

Обновление:

Я не думаю, что это связано с неподключенным выходом, я почти уверен, что нашел проблему где-то ниже:

У меня есть файл с именем letterTableViewCell2.swift который имеет этот код:

class letterTableViewCell2: UITableViewCell {

@IBOutlet weak var letter2: UIButton!
@IBOutlet weak var letter1: UIButton!


@IBAction func tapAction1(_ sender: Any) {
    var a = "a"
    a = letter1.currentTitle!
    let shareVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TraceViewController") as!TraceViewController
    shareVC.currentLetter = a

    viewController().parent?.setValue(a, forKey: "currentLetter")
    viewController().parent?.viewDidLoad()

    print(shareVC.currentLetter)
}

Тогда в моем TraceViewController у меня есть переменная:

public var currentLetter

Я проверил список Outlets в моих файлах раскадровки и нет ссылки на currentLetter

Ответы [ 3 ]

2 голосов
/ 06 февраля 2020

Удалите следующие строки

viewController().parent?.setValue(a, forKey: "currentLetter")
viewController().parent?.viewDidLoad()

Не пытайтесь открыть TraceViewController из класса ячеек letterTableViewCell2

  1. Вы можете использовать делегат, чтобы открыть TraceViewController из контроллера представления, который содержит представление таблицы
  2. Или вы можете использовать замыкание для открытия TraceViewController из контроллера представления, который содержит представление таблицы
  3. Или вы можете добавить IBAction для кнопки в просмотр класса контроллера

Использование делегата

// letterTableViewCell2.swift

protocol LetterTableViewCell2Delegate: class {
    func letter1Tapped(letter: String)
}

class letterTableViewCell2: UITableViewCell {

    @IBOutlet weak var letter2: UIButton!
    @IBOutlet weak var letter1: UIButton!
    weak var delegate: LetterTableViewCell2Delegate?

    @IBAction func tapAction1(_ sender: Any) {
        var a = "a"
        a = letter1.currentTitle!
        delegate?.letter1Tapped(letter: a)
    }
}

// ViewController.swift

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    ///
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? letterTableViewCell2 else {
            fatalError("Cell not registered")
        }
        cell.delegate = self
        return cell
    }
}
extension ViewController: LetterTableViewCell2Delegate {
    func letter1Tapped(letter: String) {
        let shareVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TraceViewController") as! TraceViewController
        shareVC.currentLetter = letter
        self.navigationController?.pushViewController(shareVC, animated: true)
    }
}
0 голосов
/ 06 февраля 2020

Выберите ваш ViewController в раскадровке. Щелкните правой кнопкой мыши на желтой точке ?. Найдите желтые предупреждения ⚠️, если они существуют. Удалите (нажмите на крестик) эти соединения. Создайте и запустите ваш проект.

Надеюсь, это поможет.

0 голосов
/ 06 февраля 2020

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

Я надеюсь, что это может помочь вам!

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