因此,我有一个文本字段,用于设置其委托。在大多数情况下,它会按预期工作,应该会调用shouldChangeCharacters,但很少会不应该调用shouldChangeCharacters。
现在,我认为这可能只是一个竞赛条件,但仅在某些清理和构建运行中才会发生。而且,当它确实发生时,它是非常一致的,即使重新创建该实例,它仍然会始终发生。这就是为什么我将其排除在竞赛问题之外,并且将其视为编译/机器代码创建期间的未定义行为。
所以,我的问题是我是否违反了Objc和Swift运行时的扩展名和协议构架设置方式?如果是,该如何解决?
class LabelAndTextFieldView: UIView{
let textField: UITextField
var delegate: LabelAndTextFieldViewDelegate?{ //strong so it would not dealloc
didSet{
textField.delegate = delegate
}
}
}
extension LabelAndTextFieldView{
class LabelAndTextFieldViewDelegate: NSObject{
//some methods unrelated to uitextfieldDelegate
}
class AmountFormattingTextFieldDelegate: LabelAndTextFieldViewDelegate{
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//disallow if not numeric
}
}
}
extension LabelAndTextFieldView.LabelAndTextFieldViewDelegate: UITextFieldDelegate{
//other uitextfield delegate methods EXCEPT shouldChangeCharactersInRange
}
//code assignment
class SomeVC{
@IBOutlet weak var labelTextFieldView: LabelAndTextFieldView!
override func viewDidLoad(){
super.viewDidLoad()
labelTextFieldView.delegate = AmountFormattingTextFieldDelegate() //this will not dealloc because intended strong on delegate
}
}