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

Était-ce utile?

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.

Linking quartzCore Framework

enter image description here

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top