iOS 8、9上的属性UITextField.BeginingOfDocument始终为零。iOS中的严重bug?
似乎在iOS 8和9、Xcode 7中,无论您做什么,其属性和总是iOS 8、9上的属性UITextField.BeginingOfDocument始终为零。iOS中的严重bug?,ios,swift,uitextfield,uitextinput,Ios,Swift,Uitextfield,Uitextinput,似乎在iOS 8和9、Xcode 7中,无论您做什么,其属性和总是nil。更糟糕的是,它们在Swift 2中不是可选类型(UITextPosition?),而是类型UITextPosition,并且仍然具有nil值。调试程序调用它,而不是nil,但它的行为与此相同。要复制,请将以下代码放入任意UIViewController: override func viewDidAppear(animated: Bool) { let textField = UITextField() t
nil
。更糟糕的是,它们在Swift 2中不是可选类型(UITextPosition?
),而是类型UITextPosition
,并且仍然具有nil
值。调试程序调用它
,而不是nil
,但它的行为与此相同。要复制,请将以下代码放入任意UIViewController
:
override func viewDidAppear(animated: Bool) {
let textField = UITextField()
textField.text = "Hello"
view.addSubview(textField)
let position: UITextPosition? = textField.beginningOfDocument //beginningOfDocument is of type UITextPosition, not optional
//following line should always succeed
let positionUnwrapped = position! //fatal error: unexpectedly found nil while unwrapping an Optional value
}
这真的是一个(巨大的)错误还是我遗漏了什么?是否有解决方法,或者采取一些步骤来解决问题
编辑:请注意,此问题未得到回答。建议的修复不适用于我的示例代码:
UITextView
的属性selectable
,类本身也没有声明此类属性beginingofdocument
之前添加UITextField
以查看层次结构,因此也不相关是的,这是
beginingofdocument
的Swift声明中的一个bug。你可以向苹果公司报告
当它成为第一响应者后,它将返回一个有效的
UITextPosition
。我不明白,如果它不是可选的,为什么你要将它声明为可选的?你在iOS8上试过了吗?@Andrea我将它声明为可选的,只是为了演示这个问题。如果我没有这样做,只是使用了这个值(应该是UITextPosition
),我会得到意想不到的行为(因为它实际上是nil
)。在iOS 8上,我得到了同样的错误,同样的行为。这里的检查已经得到了回答,所以调用becomeFirstResponder
对于大多数应用程序都很有效。但我的是键盘扩展名,在内部调用becomeFirstResponder
会导致此错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“收到当前键盘任务的多个主线程延续。”
我可以改用UITextView
,它没有此问题,但有另一个()。看来我没有办法摆脱这个文本输入地狱…似乎在ios 11中得到了修复