Подтвердить что ты не робот

Как решить CALayerInvalidGeometry ', причина: "Позиция CALayer содержит NaN: [nan nan]?

У меня ошибка, когда он запускает приложение при запуске. Это ошибка, которую я получил:

*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan nan]'
*** First throw call stack:
(0x250b022 0x2709cd6 0x24b3a48 0x24b39b9 0x217ec0d 0x2174f55 0x158f3f7 0xbc74e 0xbe512 0xbfa26 0xbe4ad 0x224ffda 0x224f956 0x224e449 0x224ab9a 0x24df970 0x247f1c1 0x2442967 0x2441d84 0x2441c9b 0x2c0a7d8 0x2c0a88a 0x1559626 0x2aed 0x2a65)
terminate called throwing an exception

Я попытался использовать точку останова Exception и не обнаружил, какая часть кода пошла не так. Она останавливается только на этом этапе -0xbc74e: movl $0,% eax-

Как я могу это решить? Пожалуйста помоги.

* изменить

Я нашел часть, которая выдает исключение, но я не вижу, что не так.

- (void)viewDidLoad {
[super viewDidLoad];
[self.activityView startAnimating];
self.mapView.layerDelegate = self;
self.mapView.touchDelegate = self;
self.mapView.calloutDelegate = self;

NSURL *mapUrl = [NSURL URLWithString:kTiledMapServiceURL];
AGSTiledMapServiceLayer *tiledLyr = [AGSTiledMapServiceLayer tiledMapServiceLayerWithURL:mapUrl];
[self.mapView addMapLayer:tiledLyr withName:@"Tiled Layer"];
        .
        .
        .
}
- (void)mapViewDidLoad:(AGSMapView *)mapView {

AGSEnvelope *envelope = [[AGSEnvelope alloc]initWithXmin:29757.610204117 ymin:40055.0379682464 xmax:29884.6992302249 ymax:40236.6028660071 spatialReference:self.mapView.spatialReference];

//call method to set extent, pass in envelope
[self.mapView zoomToEnvelope:envelope animated:YES];

self.mapView.callout.width = 195.0f;
self.mapView.callout.accessoryButtonHidden = YES;

[self.mapView.gps start];
[self.mapView centerAtPoint:self.mapView.gps.currentPoint animated:YES];  

[self.activityView stopAnimating];
self.activityView.hidden = YES;

}

Эта строка вызывает ошибку self.mapView.layerDelegate = self;, которая по умолчанию вызывает метод mapViewDidLoad

4b9b3361

Ответ 1

Я думаю, что эта ошибка возникает из-за того, что выполняемый слой имеет фрейм в этой форме:

Слойная структура == {{inf, inf}, {0, 0}}

Здесь inf - инфимум. Его набор чисел.

Итак, решение избежать этой проблемы просто создает условие перед возвратом слоя. Например:

if (layer.frame.size.width ==0 || layer.frame.size.height ==0 ) {
    return [self simpleLayer];
}else{
    return layer;        
} 

Где простой слой выглядит как:

-(CALayer *)simpleLayer{
    CALayer *layer = [[CALayer alloc] init];
    [layer setFrame:CGRectMake(0, 0, 10, 10)];
    [layer setHidden:TRUE];
    return layer;
}

Это условие решило мою проблему. Попробуй.

Ответ 2

Для меня это было вызвано тем, что toView в этом коде равен нулю:

    [UIView transitionFromView:self.fromView
                        toView:self.toView
                      duration:0.6
                       options:(currentPage > toPage ? UIViewAnimationOptionTransitionCurlDown : UIViewAnimationOptionTransitionCurlUp)
                    completion:^(BOOL finished) {
                        if (finished) {
                        }
                    }

Ответ 3

Я знаю, что этот вопрос не совсем недавно, но я просто хочу дать ответ. Во всяком случае, я предполагаю, что ваш mapView имеет AGSMapView, и вы его инициализировали следующим образом:

self.mapView = [[[AGSMapView alloc] init] autorelease];

Теперь, я думаю, что лучше, если не единственный правильный способ, инициализировать его, используйте initWithFrame. Хотя я не знаю, почему, mapView сломан, если вы используете init для инициализации.

Надеюсь, что это поможет.