2015-10-23 4 views
4

Кажется, что с iOS 8 и 9, Xcode 7 свойства beginningOfDocument и endOfDocumentUItextField всегда nil Что бы вы ни делали. Хуже того, они не имеют необязательного типа (UITextPosition?) в Swift 2, вместо этого они имеют тип UITextPosition - и все еще имеют значение nil. Debuger называет его <uninitialized> вместо nil, но это то же самое, что и для его поведения. Для воспроизведения, поместите следующий код в любой UIViewController:Свойство UITextField.beginningOfDocument всегда nil на 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 
} 

Является ли это действительно (огромная) ошибка или я что-то отсутствует? Есть ли обходной путь, возможно, некоторые шаги для решения проблемы?


EDIT: Обратите внимание, что эта проблема не ответил here. Предлагаемые исправления там не применяются к моему примеру:

  1. Мой демонстрационный код вообще не использует Interface Builder, поэтому Gazzini's answer не работает. Кроме того, Interface Builder в XCode 7 не имеет свойства selectable для UITextView, и сам класс не объявляет такое свойство.
  2. Мой демонстрационный код добавляет UITextField, чтобы просмотреть иерархию до beginningOfDocument, так что 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

Так что вызов 'startFirstponder' работает nicelly для большинства приложений. Но мое расширение клавиатуры - и вызов 'startFirstResponder' внутри приводит к этой ошибке:« Завершение приложения из-за неперехваченного исключения »NSInternalInconsistencyException», причина: «Получено более одного продолжения основного потока для текущей задачи клавиатуры». Я мог бы использовать 'UITextView', который не имеет этой проблемы, но имеет другой ([см. Мой вопрос здесь] (http://stackoverflow.com/q/33292099/311865)). Похоже, нет никакого выхода из этого вводного адда для меня ... – drasto