iOS 8、9上的属性UITextField.BeginingOfDocument始终为零。iOS中的严重bug?

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

似乎在iOS 8和9、Xcode 7中,无论您做什么,其属性和总是
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
}
这真的是一个(巨大的)错误还是我遗漏了什么?是否有解决方法,或者采取一些步骤来解决问题


编辑:请注意,此问题未得到回答。建议的修复不适用于我的示例代码:

  • 我的演示代码根本不使用Interface Builder,因此不起作用。此外,XCode 7中的接口生成器没有
    UITextView
    的属性
    selectable
    ,类本身也没有声明此类属性
  • 我的演示代码在访问
    beginingofdocument
    之前添加
    UITextField
    以查看层次结构,因此也不相关

  • 是的,这是
    beginingofdocument
    的Swift声明中的一个bug。你可以向苹果公司报告


    当它成为第一响应者后,它将返回一个有效的
    UITextPosition

    我不明白,如果它不是可选的,为什么你要将它声明为可选的?你在iOS8上试过了吗?@Andrea我将它声明为可选的,只是为了演示这个问题。如果我没有这样做,只是使用了这个值(应该是
    UITextPosition
    ),我会得到意想不到的行为(因为它实际上是
    nil
    )。在iOS 8上,我得到了同样的错误,同样的行为。这里的检查已经得到了回答,所以调用
    becomeFirstResponder
    对于大多数应用程序都很有效。但我的是键盘扩展名,在内部调用
    becomeFirstResponder
    会导致此错误:
    由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“收到当前键盘任务的多个主线程延续。”
    我可以改用
    UITextView
    ,它没有此问题,但有另一个()。看来我没有办法摆脱这个文本输入地狱…似乎在ios 11中得到了修复