6

似乎对于 iOS 8 和 9,Xcode 7 的属性beginningOfDocument和属性始终endOfDocument是您所做的一切。更糟糕的是,它们不是 Swift 2 中的可选类型 ( ),而是它们的类型- 并且仍然具有价值。调试器调用它而不是它,但它与它的行为是一样的。要重现,请将以下代码放入 any :UItextFieldnilUITextPosition?UITextPositionnil<uninitialized>nilUIViewController

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
}

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


编辑:请注意,这里没有回答这个问题。那里建议的修复不适用于我的示例代码:

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

1 回答 1

5

是的,这是beginningOfDocument. 您可以在此处向 Apple 报告。

它将UITextPosition在成为第一响应者后返回一个有效值。

于 2015-10-23T16:01:12.177 回答