2015-10-23 52 views
4

看來,用iOS 8和9,Xcode 7的屬性beginningOfDocumentendOfDocumentUItextField總是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。那裏的建議修復不適用於我的示例代碼:

  1. 我的演示代碼根本不使用Interface Builder,所以Gazzini's answer不起作用。此外,XCode 7中的Interface Builder對於UITextView沒有屬性selectable,類本身也沒有聲明這樣的屬性。
  2. 我的演示代碼在訪問beginningOfDocument之前添加了UITextField來查看層次結構,因此m1h4's answer也是不相關的。
+0

我不明白,如果它不是可選的,爲什麼你聲明它是可選的?你有沒有嘗試過iOS8? – Andrea

+0

@Andrea我聲明它是一個可選項,只是爲了演示問題。如果我沒有,只是使用了值(應該是'UITextPosition'),我會得到意想不到的行爲(因爲它真的是'nil')。在iOS 8上,我得到相同的錯誤,相同的行爲。 – drasto

+0

這裏檢查已經得到了回答http://stackoverflow.com/questions/20426048/uitextview-beginningofdocument-returns-nil – Andrea

回答

5

是的,這是Swift聲明beginningOfDocument中的一個錯誤。您可以將其報告給Apple here

它成爲第一響應者後將返回有效的UITextPosition

+0

因此,調用'becomeFirstResponder'對大多數應用程序很有幫助。但我的鍵盤擴展 - 並調用'becomeFirstResponder'裏面導致這個錯誤:終止應用程序,由於未捕獲的異常'NSInternalInconsistencyException',原因:'接收到當前鍵盤任務的多個主線程延續'。'我可以使用'UITextView',而不是這個問題 - 但有另一個([見我的問題在這裏](http://stackoverflow.com/q/33292099/311865))。看起來好像沒有辦法爲我輸入這個文字輸入地獄...... – drasto