看來,用iOS 8和9,Xcode 7的屬性beginningOfDocument
和endOfDocument
的UItextField
總是nil
無論你做什麼。更糟糕的是,它們不是Swift 2中的可選類型(UITextPosition?
),而是它們的類型爲UITextPosition
- 並且仍然具有nil
值。 Debuger稱它爲<uninitialized>
而不是nil
,但它與其行爲相同。要重現,把下面的代碼以任何UIViewController
:屬性UITextField.beginningOfDocument在iOS 8,9上始終爲零。iOS中嚴重的錯誤?
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對於
UITextView
沒有屬性selectable
,類本身也沒有聲明這樣的屬性。 - 我的演示代碼在訪問
beginningOfDocument
之前添加了UITextField
來查看層次結構,因此m1h4's answer也是不相關的。
我不明白,如果它不是可選的,爲什麼你聲明它是可選的?你有沒有嘗試過iOS8? – Andrea
@Andrea我聲明它是一個可選項,只是爲了演示問題。如果我沒有,只是使用了值(應該是'UITextPosition'),我會得到意想不到的行爲(因爲它真的是'nil')。在iOS 8上,我得到相同的錯誤,相同的行爲。 – drasto
這裏檢查已經得到了回答http://stackoverflow.com/questions/20426048/uitextview-beginningofdocument-returns-nil – Andrea