在Swift中传播基类错误

在Swift中传播基类错误,swift,cocoa,Swift,Cocoa,我想要NSTextField将空字符串替换为0(或允许的最小值),因此我创建了自定义NSNumberFormatter: class NonEmptyNumberFormatter: NSNumberFormatter { override func getObjectValue(obj: AutoreleasingUnsafeMutablePointer<AnyObject?>, forString string: String, range rangep: Uns

我想要
NSTextField
将空字符串替换为0(或允许的最小值),因此我创建了自定义
NSNumberFormatter

class NonEmptyNumberFormatter: NSNumberFormatter {    
    override func getObjectValue(obj: AutoreleasingUnsafeMutablePointer<AnyObject?>, forString string: String, range rangep: UnsafeMutablePointer<NSRange>) throws {
        if string.isEmpty {
            obj.memory = self.minimum ?? 0
        } else {
            try super.getObjectValue(obj, forString: string, range: rangep)
        }
    }
}
class NonEmptyNumberFormatter:NSNumberFormatter{
重写func getObjectValue(对象:AutoreleasingUnsafeMutablePointer

-我不明白为什么
OverrideFormatter
只将调用委托给基类时会导致错误。

我建议通过
NSTextField
委托方法
shouldChangeCharactersInRange
(或其他方法)实现这一点,而不是使用格式化程序。@jtbandes
线程1:EXC\u BAD\u指令(代码=EXC_I386_INVOP,子代码=0x0)
信息不足。哪一行?控制台中记录了错误吗?或者你能在调试器中看到堆栈跟踪吗?@jtbandes控制台只是说
致命错误:
,调试器在
AppDelegate
类标题中停止。对不起,我是Swift/Cocoa新手,不知道如何进一步调试它。@jtbandes我已经包含了一个sample gist可以在操场上执行,并清楚地显示出错误所在。我假设,如果我正在重写一个函数,而我所做的只是调用基本实现,那么该函数的行为应该与它不存在时的行为相同。我猜它与Swift Obj-C桥有关。我建议通过
NSTextField委托方法
应该更改CharactersInRange
(或其他),而不是使用格式化程序。@jtbandes
线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)
信息不足。哪一行?控制台中记录了错误吗?或者你能在调试器中看到堆栈跟踪吗?@jtbandes控制台只是说
致命错误:
,调试器在
AppDelegate
类标题中停止。对不起,我是Swift/Cocoa新手,不知道如何进一步调试它。@jtbandes我已经包含了一个saMPE gist可以在操场上执行,并清楚地显示出错误所在。我假设,如果我重写一个函数,而我所做的只是调用基本实现,那么该函数的行为应该与不存在的函数相同。我猜它与Swift Obj-C桥有关。