我正在尝试克隆 RCDefaultApp,因为它是一个很棒的应用程序,遗憾的是 Sierra 杀死了它。
大部分后端已完成;我正在试验界面,一定有一些(或许多事情)我做错了。我已经尝试过几个不同的教程,或多或少是信的,但我无法重现预期的结果。
这是我的偏好窗格的文件所有者:
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。如果我尝试绑定到 tableview 本身,我会遇到同样的问题。如果我尝试绑定到 Column,它实际上似乎可以工作(尽管由于某种原因它坚持我需要使用 NSString;甚至 String 都不能工作)除了它看起来像这样: