Почему я получаю "Должен переводить авторезистирующую маску в ограничения, чтобы иметь _setHostsLayoutEngine: YES" в xcode 6 beta

У меня есть следующий код в быстром UITableViewController, но я получаю "Должен переводить маску автосохранения в ограничения, чтобы иметь _setHostsLayoutEngine: исключение YES во второй строке. Я не изменял никаких настроек в построителе интерфейса (поэтому классы Autolayout и size оба проверяются).

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
    let cell:TodoItemCell = tableView.dequeueReusableCellWithIdentifier("TodoItemCell", forIndexPath: indexPath) as TodoItemCell
    let row = indexPath.row
    cell.titleLabel.text  = self.todoItems![row].title
    self.callback!(row)
    // Configure the cell...

    return cell
}

Что я делаю неправильно?

Ответ 1

Не уверен, насколько это помогает, но я вижу ту же ошибку, если попытаюсь поместить ячейку непосредственно в UIView, а не в таблицу. Это отлично работает с Xcode 5, поэтому я подозреваю, что это ошибка с XCode6/ios8. В то же время отлаживаем этот метод и смотрим на ваш tableView. Убедитесь, что на самом деле есть экземпляр ячейки, которую вы пытаетесь восстановить.

Обновление: Подано сообщение об ошибке с Apple, и я могу подтвердить, что это проблема ios8. К сожалению, он все еще присутствует на бета-5, надеюсь, они будут исправлены до финальной версии.

Ответ 2

Это ошибка НЕ, вы просто не можете использовать ячейку UIView as для представления таблицы, вы должны убедиться, что вид верхнего уровня в файле nib является UITableViewCell.

Ответ 3

В моем случае я загружал файл nib с UITableViewCell, содержащимся в UIView. После отключения автозапуска в файле nib у меня больше нет исключения.

Ответ 4

Я также столкнулся с этой проблемой, и это было связано с подклассом UITableViewCell, который используется в иерархии представлений вне UITableView, как указано в других ответах. В этом случае у меня было ограниченное время, поэтому я не мог переместить функциональность, присутствующую в этом подклассе, в подкласс UIView. Обходной путь, который я придумал, состоял в том, чтобы просто создать экземпляр UIView в моей иерархии представлений, где должна была быть ячейка, и переместить иерархию представления экземпляра ячейки в нее и удалить сама ячейку из отображаемой иерархии представлений. До тех пор, пока я сохранил представления, которые я перевел, связанный с различными свойствами экземпляра ячейки, все работает нормально.

Это немного взломанный, но он будет продолжать работать до тех пор, пока не появится время для рефакторинга.

Ответ 5

Невозможно выбрать опцию "Использовать автомасштабирование" из свойств .xib. - Опубликовать то, что я сделал, поскольку это может помочь другим.

Спасибо.

Ответ 6

ЛЮДИ, ЭТО НЕ БЫЛО. Как никогда не сказано ниже:

"Это НЕ ошибка, вы просто не можете использовать UIView как ячейку для представления таблицы, вы должны убедиться, что представление верхнего уровня в файле nib является UITableViewCell".

Я тестировал его, и он работает.

Вам нужно создать файл Xib и удалить вид верхнего уровня, который у него есть. После этого вы перетаскиваете UITableViewCell в наконечник. Таким образом, этой проблемы не будет.

Обратите внимание, что объект верхнего уровня в Xib является UITableViewCell, а не UIView

Ответ 7

В моем случае я использовал UITableViewCell в UIView для создания пользовательской ячейки введите описание изображения здесь

то я удалил ячейку из UIView, а затем добавил все содержимое в UIView напрямую и решил мою проблему. введите описание изображения здесь

Надеюсь, это тебе тоже поможет. Все лучшее

Ответ 8

В моем случае я скопировал и вложил ячейку, но ограничений не было, что привело к этой ошибке. если вы копируете ячейку в другой файл xib, убедитесь, что ограничения также скопированы или снова создаются.

Ответ 9

В моем случае родительский элемент UITableViewCell был основным представлением вместо UITableView. В этом случае вам просто нужно поместить ячейку в таблицу.

Я думаю, что это может быть обычной проблемой, если вы перетащите ячейку в представление, не заботясь о правильной иерархии.