2012-07-18 9 views
12

起動時にアプリケーションがクラッシュするエラーが発生しました。 これは私が得たエラーです: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 

私は例外のブレークポイントを使用してみました、それはこの時点で-0xbc74eでのみを停止wrong.Itを行っているコードの一部は表示されません: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; 

} 

この行は、デフォルトではメソッドmapViewDidLoad

を呼び出すエラー self.mapView.layerDelegate = self;を引き起こしている間違っているものを見ることができません
+1

誰が解決する方法を知っていますか? – sihao

答えて

4

このエラーは、実行されるレイヤーがこの形式のフレームを持っているために発生します。

レイヤーフレーム== {{inf、inf}、{0、0}}

ここで、infは最小です。その数の集合。

このような問題を回避するソリューションは、レイヤーを返す前に条件を作成するだけです。 などのように:

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

この状態は私の問題を解決:シンプルな層は、としてのようなものです

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

。それを試してみてください。

+7

お返事ありがとうございます。しかし、私はエラーを持っている部分を見つけることができません。どこにコードを置くことができますか?何かアドバイス? – sihao

-1

私はこの質問が非常に最近ではないことを知っていますが、私はちょうど答えを与えたいと思います。とにかく、私はあなたのmapViewを推測しているAGSMapViewのものであり、あなたはそれをこのように初期化されています

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

、私はそれを初期化するための唯一の正しい方法、より良いそうでない場合は、initWithFrameを使用していると思います。理由はわかりませんが、initを初期化に使用するとmapViewが壊れています。

これが役に立ちます。それはゼロであること、このコードでtoViewによって引き起こされた私にとっては

1

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