CALAYERINVALIDGEOMÉTRIE D'ÉCALAYERINVALIDGEOMétrie '
-
14-11-2019 - |
Question
Je fais une application de vue à onglets et je utilise l'API de CloudMade. J'ai un projet de travail dans une application unique que j'essaie de copier dans la vue à onglets.
J'ai tout copié et collé, mis en place les préférences du projet et tout. Le Tabbed View FirstViewController est exactement le même que l'ancienne application à vue unique. Cependant, lorsque j'exécute l'application, j'obtiens cette erreur:
Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [inf inf; nan nan]'
J'ai essayé de Google mais rien n'est venu. C'est ma première application de vue à onglets, donc je ne sais pas s'il y a des choses auxquelles je dois faire attention. Je ne sais même pas quelle section de code ou rapport d'erreur à coller ici. Toute aide serait appréciée! Merci beaucoup!
Edit 2: Voici la trace de pile d'exception (je pense):
2012-02-28 23:51:00.720 ParkerAssistant[1454:f803] CRASH: CALayer bounds contains NaN: [inf inf; nan nan]
2012-02-28 23:51:00.725 ParkerAssistant[1454:f803] Stack Trace: (
0 CoreFoundation 0x0156606e __exceptionPreprocess + 206
1 libobjc.A.dylib 0x01b1ad0a objc_exception_throw + 44
2 CoreFoundation 0x0150ea78 +[NSException raise:format:arguments:] + 136
3 CoreFoundation 0x0150e9e9 +[NSException raise:format:] + 57
4 QuartzCore 0x001df137 _ZN2CA5Layer10set_boundsERKNS_4RectEb + 215
5 QuartzCore 0x001d52fa -[CALayer setBounds:] + 156
6 ParkerAssistant 0x0003ee9a -[RMPath recalculateGeometry] + 927
7 ParkerAssistant 0x00002f55 -[ParkerAssistantFirstViewController viewDidLoad] + 1397
8 UIKit 0x003fd64e -[UIViewController view] + 184
9 UIKit 0x00418b89 -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:] + 105
10 UIKit 0x004189bd -[UITabBarController transitionFromViewController:toViewController:] + 63
11 UIKit 0x00416f8a -[UITabBarController _setSelectedViewController:] + 339
12 UIKit 0x00416e2f -[UITabBarController setSelectedViewController:] + 169
13 UIKit 0x00414ffb -[UITabBarController _selectDefaultViewControllerIfNecessaryWithAppearanceTransitions:] + 192
14 UIKit 0x0041585a -[UITabBarController viewWillAppear:] + 148
15 UIKit 0x003fefbf -[UIViewController _setViewAppearState:isAnimating:] + 158
16 UIKit 0x003ff21b -[UIViewController __viewWillAppear:] + 62
17 UIKit 0x004000f1 -[UIViewController viewWillMoveToWindow:] + 253
18 UIKit 0x0036efec -[UIView(Hierarchy) _willMoveToWindow:withAncestorView:] + 592
19 UIKit 0x00374572 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 388
20 UIKit 0x0036e72b -[UIView(Hierarchy) addSubview:] + 56
21 UIKit 0x0035dbc2 -[UIWindow addRootViewControllerViewIfPossible] + 380
22 UIKit 0x0035dce2 -[UIWindow _setHidden:forced:] + 280
23 UIKit 0x0035dea8 -[UIWindow _orderFrontWithoutMakingKey] + 49
24 UIKit 0x00364d9a -[UIWindow makeKeyAndVisible] + 35
25 UIKit 0x00335be6 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1820
26 UIKit 0x003368a6 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 508
27 UIKit 0x00345743 -[UIApplication handleEvent:withNewEvent:] + 1027
28 UIKit 0x003461f8 -[UIApplication sendEvent:] + 68
29 UIKit 0x00339aa9 _UIApplicationHandleEvent + 8196
30 GraphicsServices 0x02398fa9 PurpleEventCallback + 1274
31 CoreFoundation 0x0153a1c5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
32 CoreFoundation 0x0149f022 __CFRunLoopDoSource1 + 146
33 CoreFoundation 0x0149d90a __CFRunLoopRun + 2218
34 CoreFoundation 0x0149cdb4 CFRunLoopRunSpecific + 212
35 CoreFoundation 0x0149cccb CFRunLoopRunInMode + 123
36 UIKit 0x003362a7 -[UIApplication _run] + 576
37 UIKit 0x00337a9b UIApplicationMain + 1175
38 ParkerAssistant 0x000024e8 main + 152
39 ParkerAssistant 0x00002445 start + 53
)
2012-02-28 23:51:00.726 ParkerAssistant[1454:f803] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [inf inf; nan nan]'
*** First throw call stack:
(0x1566052 0x1b1ad0a 0x150ea78 0x150e9e9 0x1df137 0x1d52fa 0x3ee9a 0x2f55 0x3fd64e 0x418b89 0x4189bd 0x416f8a 0x416e2f 0x414ffb 0x41585a 0x3fefbf 0x3ff21b 0x4000f1 0x36efec 0x374572 0x36e72b 0x35dbc2 0x35dce2 0x35dea8 0x364d9a 0x335be6 0x3368a6 0x345743 0x3461f8 0x339aa9 0x2398fa9 0x153a1c5 0x149f022 0x149d90a 0x149cdb4 0x149cccb 0x3362a7 0x337a9b 0x24e8 0x2445)
terminate called throwing an exception
Edit 3: Méthode ViewDidload:
- (void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
[locationManager startUpdatingLocation];
id cmTilesource = [[RMCloudMadeMapSource alloc] initWithAccessKey:@"dfd3baf1ceda40ff8b4bf4b55303253d" styleNumber:1];
[[RMMapContents alloc] initWithView:mapView tilesource: cmTilesource];
tokenManager = [[TokenManager alloc] initWithApikey:@"dfd3baf1ceda40ff8b4bf4b55303253d"];
_routingManager = [[CMRoutingManager alloc] initWithMapView:mapView tokenManager:tokenManager];
_routingManager.delegate = self;
int width = self.view.frame.size.width;
int height = 64;
_rifRect = CGRectMake(0, 0, width, height);
_firCenter = CGPointMake(width/2,height/2);
route = [[RMPath alloc] initForMap:mapView];
route.lineColor = [UIColor blueColor];
route.fillColor = [UIColor clearColor];
route.lineWidth = 5;
route.scaleLineWidth = NO;
_rif = [[CMRouteInfoView alloc] init:_rifRect :nil];
_rif.center = _firCenter;
_rif.autoresizingMask = UIViewAutoresizingFlexibleWidth;
_rif.delegate = self;
}
ÉDITER Salut, comme il semble, le contrôleur de vue à onglets n'a rien à voir avec cela. Je l'ai copié à nouveau pour une nouvelle application unique, et cela ne fonctionne pas à nouveau. Je devrais probablement mentionner (je ne pensais pas avoir fait de différence auparavant) que l'application de travail fait NE PAS Utilisez Storyboard, juste un seul fichier XIB. Le 2 ne fonctionne pas (onglets et vue unique) EST-CE QUEJe ne sais même pas par où commencer .. merci
La solution
Le problème était que je n'ai pas lié la sortie de la carte, MapView, à l'objet RMMAPVIEW dans le storyboard. Maintenant, ça marche.
Autres conseils
Dans ton -[ParkerAssistantFirstViewController viewDidLoad]
Méthode, vous envoyez le recalculateGeometry
Message à une instance de RMPath
. RMPath
alors définit les limites d'un CALayer
.
En regardant le message d'exception, nous pouvons voir que RMPath
définit les limites de la couche sur le rectangle [inf inf; nan nan]
. Le mot inf
est abrégé pour «Infinity», donc l'origine de votre rectangle est à Infinity. Le mot nan
signifie «pas-un nombre», donc la taille de votre rectangle est complètement invalide. C'est quoi CALayer
se plaint.
En regardant les variables de votre premier montage, je vois que scale
est 0. C'est suspect. Si c'est le facteur de zoom de la vue, alors ce n'est probablement pas valide. Si c'est quelque chose que vous contrôlez, essayez de le régler sur 1 (ou un autre petit nombre positif).
Avez-vous lié le quartzcore.framework? Je suis presque sûr que Calayer a besoin du quartzcore. Vous pouvez le faire en sélectionnant votre onglet cible -> Build Phases - Link Binary avec les bibliothèques. Cliquez sur le signe plus et faites défiler vers le bas et sélectionnez Quartzcore pour le lier à votre projet.