在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桥有关。