似乎对于 iOS 8 和 9,Xcode 7 的属性beginningOfDocument
和属性始终endOfDocument
是您所做的一切。更糟糕的是,它们不是 Swift 2 中的可选类型 ( ),而是它们的类型- 并且仍然具有价值。调试器调用它而不是它,但它与它的行为是一样的。要重现,请将以下代码放入 any :UItextField
nil
UITextPosition?
UITextPosition
nil
<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
}
这真的是一个(巨大的)错误还是我错过了什么?是否有解决方法,也许有一些解决问题的步骤?
编辑:请注意,这里没有回答这个问题。那里建议的修复不适用于我的示例代码:
- 我的演示代码根本不使用 Interface Builder,所以Gazzini 的回答不起作用。此外,XCode 7 中的 Interface Builder 没有属性
selectable
forUITextView
,类本身也没有声明这样的属性。 - 我的演示代码在访问
UITextField
之前添加到视图层次结构中,beginningOfDocument
因此m1h4 的答案也不相关。