【发布时间】:2016-01-23 00:11:12
【问题描述】:
似乎在 iOS 8 和 9、Xcode 7 中,UItextField 的属性 beginningOfDocument 和 endOfDocument 始终是 nil,无论您做什么。更糟糕的是,它们在 Swift 2 中不是可选类型 (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
}
这真的是一个(巨大的)错误还是我错过了什么?是否有解决方法,也许有一些解决问题的步骤?
编辑:请注意,这个问题未回答here。那里建议的修复不适用于我的示例代码:
- 我的演示代码根本没有使用 Interface Builder,所以 Gazzini's answer 不起作用。此外,XCode 7 中的 Interface Builder 没有属性
selectableforUITextView,类本身也没有声明这样的属性。 - 我的演示代码在访问
beginningOfDocument之前将UITextField添加到视图层次结构中,因此m1h4's answer 也不相关。
【问题讨论】:
-
我不明白,如果不是可选的,你为什么要声明它是可选的?你在iOS8上试过吗?
-
@Andrea 我将其声明为可选只是为了演示问题。如果我没有,只是使用了这个值(应该是
UITextPosition),我会得到意想不到的行为(因为它确实是nil)。在 iOS 8 上,我得到同样的错误,同样的行为。 -
查看这里是否已经回答stackoverflow.com/questions/20426048/…
标签: ios swift uitextfield uitextinput