如何解决CALayerInvalidGeometry',原因:'CALayer的位置包含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-

我该如何解决? 请帮忙。

*编辑

我发现抛出exception的部分,但我看不出什么是错的

 - (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

我觉得这个错误发生是因为被执行的图层有这样的forms:

图层框架== {{inf,inf},{0,0}}

这里inf是infimum。 它的数字集。

所以避免这种问题的解决scheme只是在图层返回之前创build条件。 像:

 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; } 

这个情况解决了我的问题。 尝试一下。

对我来说,这是由这个代码中的toView引起的:

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

我知道这个问题不是很近,但我只想给出答案。 无论如何,我猜你的mapViewAGSMapView ,你已经这样初始化它:

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

现在,我认为,如果不是唯一正确的方法,使用initWithFrame来初始化它会更好。 虽然我不知道为什么,但是如果你使用init来初始化, mapView被破坏。

希望这可以帮助。