необработанное исключение «NSInvalidArgumentException», причина: «- [UITableViewSection view]: нераспознанный селектор отправлен в экземпляр 0x600003721110» - PullRequest
0 голосов
/ 11 мая 2019

Ошибка возникает, когда я захожу в свой контроллер просмотра настроек.В настройках есть UISegmentedControl, который подключен к theme.swift через SettingsViewcontroller.swift ViewDidLoad ().

Я следовал учебному пособию, но получил ошибку по поводу перечисления Theme, которая исчезла, когда я добавил значение Intвведите объявление enum.Тема возвращается структурой ThemeManager с rawValue.

Я почти уверен, что ошибка вызвана settingsViewController.swift.Поскольку единственный код, который выполняется при загрузке settingsViewController.swift, находится в методе viewDidLoad (), я думаю, что проблема в этом.

Причиной необработанного исключения является «представление UITableViewSection», котороеЯ предполагаю, что это UISegmentControl, так как единственный другой раздел - это кнопка «Применить», код которой не запускается, пока она не нажата?!

Я читал о похожих ошибках и понял, что методвызывается для объекта, который не содержит указанный метод.Я не вижу ничего подобного, но я не уверен в строке 30 в Theme.swift.Мне пришлось изменить учебный код из-за множественных ошибок.Либо это, либо перечисление Theme не должно быть Int (строка 13 Theme.swift).

Theme.swift

import UIKit

let SelectedThemeKey = "SelectedTheme"

enum Theme : Int {
    case Default, Dark, Graphical

    var mainColor: UIColor {
        switch self {
        case .Default:
            return UIColor(red: 87.0/255.0, green: 188.0/255.0, blue: 95.0/255.0, alpha: 1.0)
        case .Dark:
            return UIColor(red: 242.0/255.0, green: 101.0/255.0, blue: 34.0/255.0, alpha: 1.0)
        case .Graphical:
            return UIColor(red: 10.0/255.0, green: 10.0/255.0, blue: 10.0/255.0, alpha: 1.0)
        }
    }
}

struct ThemeManager {
    static func currentTheme() -> Theme {
        if let storedTheme = (UserDefaults.standard.value(forKey: SelectedThemeKey) as AnyObject).integerValue {
            return Theme(rawValue: storedTheme)!
        } else {
            return .Default
        }
    }

    static func applyTheme(theme: Theme) {
        // 1
        UserDefaults.standard.setValue(theme.rawValue, forKey: SelectedThemeKey)
        UserDefaults.standard.synchronize()

        // 2
        let sharedApplication = UIApplication.shared
        sharedApplication.delegate?.window??.tintColor = theme.mainColor
    }
}

SettingsViewcontroller.swift

import UIKit

class SettingsViewController: UITableViewController {

    @IBOutlet weak var themeSelector: UISegmentedControl!
    @IBOutlet weak var applyButton: UIButton!

    //@IBOutlet weak var settingsTableView: UITableView!

    //let settingsTableOptions = ["Turn On Dark Mode"]

    override func viewDidLoad() {
        super.viewDidLoad()

        // Register custom cell
        //let nib = UINib(nibName: "settingsTableCell", bundle: nil)
        //settingsTableView.register(nib, forCellReuseIdentifier: "Settings")

        themeSelector.selectedSegmentIndex = ThemeManager.currentTheme().rawValue
    }

    func dismiss() {
        self.dismiss(animated: true, completion: nil)
    }

    @IBAction func applyTheme(sender: UIButton) {
        if let selectedTheme = Theme(rawValue: themeSelector.selectedSegmentIndex) {
            ThemeManager.applyTheme(theme: selectedTheme)
        }
        dismiss()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated);
    }
}



I've setup the story board for the settings view exactly as the tutorial, and don't recognise any options that could cause my problem.
...