UITextFieldDelegate Swift崩溃(函数签名特化)

时间:2016-10-24 15:56:16

标签: ios objective-c swift cocoa-touch optional

我知道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标记确认)。现在我的理论是关于这种情况下的错误:

  1. 我不知道如何使用textField委托参数。控制器中只有一个文本字段,我不需要进行类型转换,这可能是一个好意而不是理由。

  2. 编译器删除了我的支票。在那种情况下,我想知道如何强迫它留下来。它适用于同一个应用程序的其他两个位置。

  3. 我还没有学到关于勇敢的新斯威夫特世界的其他内容。

  4. 想法?感谢。

    P.S。我忘了补充一点,这是一个我们无法重现的Appstore版本崩溃报告。我不会在这里问我是否可以简单地调试它。

0 个答案:

没有答案