Swift на панели предпочтений, с привязками какао; Что я делаю неправильно?

Я пытаюсь сделать клон RCDefaultApp, потому что это было отличное приложение, и, к сожалению, Сьерра убила его.

Большая часть бэкенда сделана; Я экспериментирую с интерфейсом, и должно быть что-то (или множество вещей), я делаю неправильно. Я пытался следовать нескольким различным учебникам, более или менее к письму, и я просто не могу воспроизвести ожидаемые результаты.

Это владелец файла моей предпочтительной панели:

import PreferencePanes

class SWDAMainPrefPane: NSPreferencePane {
    var schemesList = SchemesModel().value(forKey:"allSchemes") as! NSObject
    var internetSchemes = SchemesModel().internetSchemes
    override func mainViewDidLoad() {
        super.mainViewDidLoad()

    }
}

class SchemesModel: NSObject {
    var internetSchemes: NSObject {
        get {
        var schemes: [Scheme] = []
        var data = ["http":"Web Browser","mailto":"E-Mail","news":"News","rss":"RSS","ftp":"FTP","im":"Instant Messaging"]
        for (index, scheme) in data.enumerated() {
            schemes.append(Scheme(schemeName: scheme.key, description: scheme.value))
        }
        return schemes as! NSObject
        }
        set {}
    }
    var allSchemes: NSObject {
        get {
        var schemes = [Scheme]()
        if let schemesHandlers = LSWrappers.Schemes().copySchemesAndHandlers() {
            for scheme in Array(schemesHandlers.keys) {

                schemes.append(Scheme.init(schemeName: scheme))
            }
            NSLog(String(describing:schemes))
            return schemes as! NSObject
        }
        else { return [] as! NSObject }
        }
        set {}
    }
}

class Scheme: NSObject {
    init (schemeName: String, description: String? = nil) {

        super.init()
        self.setValue(schemeName, forKey: "schemeName")
        if let description = description {

            self.setValue(description, forKey: "schemeDescription")

        }
        else {

                self.setValue(self.getDescription(), forKey: "schemeDescription")
        }

    }
    var wrappedName: NSObject {
        get {
        return self.schemeName as! NSObject
        }
        set {}
    }
    var wrappedDescription: NSObject {
        get {
            return self.schemeDescription as! NSObject
        }
        set {}
    }
    var schemeName: NSString = ""
    var schemeDescription: NSString = ""

    func getDescription () -> NSString {

        if let schemeDescription = LSWrappers.Schemes().getNameForScheme(self.schemeName as String) {
            self.setValue(schemeDescription, forKey: "schemeDescription")
            return self.schemeDescription
        }
        else { return "" }
    }
}

Первоначально я пытался сбросить данные в NSBrowser, но не было абсолютно никакого способа заставить это работать; всегда происходил сбой во время выполнения с ошибками "нераспознанный селектор отправлен в экземпляр...", хотя я уверен, что все подключено правильно.

Обернутые свойства есть, потому что браузер ожидал, что я свяжусь с NSObject.

Затем я попытался использовать NSTableView. Если я пытаюсь привязать к самому виду таблицы, у меня та же проблема. Если я пытаюсь привязать столбец, он действительно работает (хотя по какой-то причине он настаивает на том, что мне нужно использовать NSString; даже String не работает), КРОМЕ этого выглядит так:

PreferencePane выглядит как... что

Вот как выглядит мой контроллер массива. Атрибуты контроллера массива Привязки контроллера массива

А вот и привязка табличного представления. Привязка столбцов таблицы

0 ответов

Другие вопросы по тегам