我知道function signature specialization
的含义。我已经修复了两个其他的ObjC Cocoa,尽管Swift宣布非选择性,但仍然给我发了nils。我试图以同样的方式解决这个问题,但它仍然存在。
Selector name found in current argument registers: release
function signature specialization <Arg[0] = Exploded, Arg[1] = Owned To Guaranteed and Exploded> of SpecificTextField.shouldChangeCharactersInRange (__C._NSRange, replacementString : Swift.String) -> Swift.Bool (SpecificTextField.swift:0)
SpecificTextField.shouldChangeCharactersInRange (__C._NSRange, replacementString : Swift.String) -> Swift.Bool (SpecificTextField.swift:91)
function signature specialization <Arg[0] = Dead and Owned To Guaranteed, Arg[1] = Exploded, Arg[2] = Owned To Guaranteed and Exploded> of MyController.textField (__ObjC.UITextField, shouldChangeCharactersInRange : __C._NSRange, replacementString : Swift.String) -> Swift.Bool (MyController.swift:645)
@objc MyController.textField (__ObjC.UITextField, shouldChangeCharactersInRange : __C._NSRange, replacementString : Swift.String) -> Swift.Bool (MyController.swift:0)
...
MyController.swift
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
if isOptionalObjectNil(string) {
return false
}
return specificTextField?.shouldChangeCharactersInRange(range, replacementString: string) ?? true
}
SpecificTextField.swift
class SpecificTextField: UITextField
{
func shouldChangeCharactersInRange(range: NSRange, replacementString string: String) -> Bool {
...
}
}
isOptionalObjectNil
是一个全局函数,它成功地减轻了我的其他function signature specialization
崩溃(我有一个混合的ObjC / Swift测试用例):
public func isOptionalObjectNil(testable: AnyObject?) -> Bool
{
return testable == nil
}
如果要信任崩溃报告,那么代理人将获得一些零。我决定它只能是string
,因为range
是按值传递的,而textField
未被使用(由Dead
标记确认)。现在我的理论是关于这种情况下的错误:
我不知道如何使用textField
委托参数。控制器中只有一个文本字段,我不需要进行类型转换,这可能是一个好意而不是理由。
编译器删除了我的支票。在那种情况下,我想知道如何强迫它留下来。它适用于同一个应用程序的其他两个位置。
我还没有学到关于勇敢的新斯威夫特世界的其他内容。
想法?感谢。
P.S。我忘了补充一点,这是一个我们无法重现的Appstore版本崩溃报告。我不会在这里问我是否可以简单地调试它。