Завершение работы приложения из-за неперехваченного исключения ‘CALayerInvalidGeometry’, причина: ‘Границы CALayer содержат NaN: [0 0; 49.0686 nan]’

#ios #uitableview #calayer

#iOS #uitableview #calayer

Вопрос:

У меня есть TableView с пользовательскими ячейками. каждая из ячеек имеет UIView внутри и UILabel.

Данные для первых двух ячеек в порядке — при прокрутке третьей приложение вылетает с ошибкой :

 Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [0 0; 49.0686 nan]'
  

Код, в котором это происходит, таков :

 BarView *bar = [[BarView alloc] initWithFrame:CGRectMake((barFullWidth - barWidth)/2   _index*(barFullWidth),  plotView.height - roundf([[barInfo objectForKey:@"value"] floatValue]*barHeightRatio), barWidth, roundf([[barInfo objectForKey:@"value"] floatValue]*barHeightRatio))];
  

который вызывает это :

 - (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
  

На что мне следует обратить внимание? Я даже не могу понять, что означает эта ошибка.

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

Комментарии:

1. Ваш вид панели — это ячейка? Или это вид панели внутри ячейки? Может быть, немного больше кода для контекста?

2. @AfonsoTsukamoto панель — это вид внутри ячейки.

3. Просто для проверки работоспособности попробуйте сначала создать CGRect, nslog его, а затем вызвать init с frame. Что-то устанавливает границы слоя этого вида равными нулю, и ваше переопределение init кажется правильным (просто отсутствует возвращаемое значение self;)

4. В строке, в которой происходит сбой, я вижу, что: {{0, nan}, {49.06863, nan}} это означает, что по y и высота равны nan по какой-то причине.

5. Точно. Эти значения взяты из NSLog? Или из стека исключения?