在iOS 8,9上,属性UITextField.beginningOfDocument总是为零。在iOS中存在严重错误?

时间:2015-10-23 12:44:03

标签: ios swift uitextfield uitextinput

似乎对于iOS 8和9,Xcode 7,beginningOfDocument的属性endOfDocumentUItextField始终是nil,无论你做什么。更糟糕的是,它们不是Swift 2中的可选类型(UITextPosition?),而是类型为UITextPosition - 并且仍然具有nil值。 Debuger将其称为<uninitialized>而不是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
}

这真的是一个(巨大的)错误还是我错过了什么?是否有解决方法,可能需要一些步骤来解决问题?

编辑:请注意,此问题已解答here。建议的修复程序不适用于我的示例代码:

  1. 我的演示代码根本不使用Interface Builder,因此Gazzini's answer不起作用。此外,XCode 7中的Interface Builder没有selectable的属性UITextView,类本身也没有声明这样的属性。
  2. 我的演示代码在访问UITextField之前将beginningOfDocument添加到视图层次结构中,因此m1h4's answer也不相关。

1 个答案:

答案 0 :(得分:5)

是的,这是beginningOfDocument的Swift声明中的一个错误。您可以将其报告给Apple here

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