首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何求解CALayerInvalidGeometry',原因:'CALayer位置包含NaN:[nan nan]?

如何求解CALayerInvalidGeometry',原因:'CALayer位置包含NaN:[nan nan]?
EN

Stack Overflow用户
提问于 2012-07-18 09:33:45
回答 3查看 26K关注 0票数 17

我有一个错误,当应用程序启动时,它会崩溃。这是我得到的错误:

代码语言:javascript
复制
*** 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

我尝试使用异常断点,但它没有显示代码的哪一部分已经失效,仅在这一点停止-0xbc74e: wrong.It $0,%eax-

我该怎么解决它呢?请帮帮忙。

*编辑

我找到了抛出异常的部分,但我看不出哪里出了问题

代码语言:javascript
复制
- (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;

}

这一行导致了缺省调用方法mapViewDidLoadself.mapView.layerDelegate = self;错误

EN

回答 3

Stack Overflow用户

发布于 2012-07-24 19:04:46

我认为这个错误的发生是因为被执行的层有如下形式的框架:

图层帧== {{inf,inf},{0,0}}

这里的inf是下确界。它的一组数字。

因此,避免这种问题的解决方案就是在层返回之前创建条件。如下所示:

代码语言:javascript
复制
if (layer.frame.size.width ==0 || layer.frame.size.height ==0 ) {
    return [self simpleLayer];
}else{
    return layer;        
} 

其中simple layer类似于:

代码语言:javascript
复制
-(CALayer *)simpleLayer{
    CALayer *layer = [[CALayer alloc] init];
    [layer setFrame:CGRectMake(0, 0, 10, 10)];
    [layer setHidden:TRUE];
    return layer;
}

这种情况解决了我的问题。试试看。

票数 5
EN

Stack Overflow用户

发布于 2013-05-06 02:36:43

对于我来说,这是由于以下代码中的toView为空造成的:

代码语言:javascript
复制
    [UIView transitionFromView:self.fromView
                        toView:self.toView
                      duration:0.6
                       options:(currentPage > toPage ? UIViewAnimationOptionTransitionCurlDown : UIViewAnimationOptionTransitionCurlUp)
                    completion:^(BOOL finished) {
                        if (finished) {
                        }
                    }
票数 1
EN

Stack Overflow用户

发布于 2013-01-21 14:58:14

我知道这个问题不是很新,但我只是想给出一个答案。不管怎样,我猜你的mapViewAGSMapView的,你是这样初始化的:

代码语言:javascript
复制
self.mapView = [[[AGSMapView alloc] init] autorelease];

现在,我认为初始化它的最好方法是使用initWithFrame,如果不是唯一正确的方法。虽然我不知道为什么,但如果你使用init进行初始化,mapView就会崩溃。

希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11533120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档