Что вызывает эту ошибку? “Положение CALayer содержит NaN: [240 nan]”

Я видел, что это происходит каждый раз, когда я поворачиваю экран, который имеет a UITableView на нем. Я узнал, что это происходит промежуток willRotate и didRotate вызовы метода в UIViewController Мои коллеги видели его в других местах также, обычно вокруг вращения. Это не начало происходить до самого последнего времени, и мы озадачены относительно того, как мы должны иметь дело с ним (поиски Google не поднимают сообщение об ошибке в его точной форме). Кто-либо еще встретился с этим, которое знает, что делать с этим?

46
задан pablasso 16 November 2011 в 04:07
поделиться

2 ответа

Я нашел проблему.

Когда вы сбрасываете фрейм tableview , он вызывает метод делегата tableView: heightForRowAtIndexPath: для каждой строки в таблице, чтобы он мог пересчитать размер своего содержимого, если необходимо . В этот момент мы выполняем некоторую специальную обработку, чтобы вернуть высоту, и из-за некоторых неверных предположений в нашем коде мы по ошибке вернули NaN из-за ошибки деления на ноль (переменная, на которую мы делим, предполагалась равной никогда не быть нулевым). Убедившись, что мы не делим на ноль, здесь это исправлено.

26
ответ дан 26 November 2019 в 20:24
поделиться

(Решил убрать это из комментариев и поставить в качестве ответа, так как я думаю, что это чертовски хороший ответ :)

Ха! У меня тоже был расчет NaN (div0). Ключевое средство отладки: сообщение, о котором идет речь, выводится с помощью NSLog (), поэтому установите точку останова на NSLog () и посмотрите, что делает ОС в это время. Для меня это было myUISlider.value = NaN.

Чтобы установить точку останова:

XCode 3.x

  • CMD-SHIFT-Y (окно отладки).
  • Кнопка точек останова.
  • «Дважды щелкните для символа»
  • Введите «NSLog» (без кавычек).

XCode 4.x

  • CMD-6 (навигатор точек останова.)
  • «+» для добавления точки останова (внизу слева.)
  • Выберите ДОБАВИТЬ СИМВОЛИЧЕСКУЮ ТОЧКУ РАЗРЫВА.
  • Символ: NSLog
  • Подтвердить: Готово.

XCode 5.x - 7.1 (минимум) (То же, что и 4.x, за исключением того, что теперь навигатором точек останова является CMD-7.)

Запустите приложение, посмотрите, как оно прерывается в NSLog, проверьте трассировки стека.

36
ответ дан 26 November 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: