CALayerInvalidGeometry'CALayerInvalidGeometry» - PullRequest
0 голосов
/ 28 февраля 2012

Я создаю приложение с вкладками и использую API-интерфейс CloudMade.У меня есть рабочий проект в приложении с одним представлением, которое я пытаюсь скопировать в одно представление с вкладками.

Я скопировал и вставил все, настроил параметры проекта и все.Представление с вкладками FirstViewController точно такое же, как и старое приложение с одним представлением.Однако, когда я запускаю приложение, я получаю эту ошибку:

Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [inf inf; nan nan]'

Я пытался Google, но ничего не вышло.Это мое первое приложение с вкладками, поэтому я не уверен, есть ли вещи, на которые я должен обратить внимание.Я даже не уверен, какой раздел кода или отчет об ошибке вставить сюда.Любая помощь будет оценена!Большое спасибо!

РЕДАКТИРОВАТЬ 2: Вот трассировка стека исключений (я думаю):

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

РЕДАКТИРОВАТЬ 3: метод 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;
}

РЕДАКТИРОВАТЬ Привет, Как кажется, контроллер представления с вкладками не имеет к этому никакого отношения.Я снова скопировал его для нового приложения с одним представлением, и он снова не работает.Я, вероятно, должен упомянуть (не думал, что это имело какое-то значение раньше), что работающее приложение НЕ использует раскадровку, только один файл XIB.2 не работает (вкладка и одиночный просмотр) DOES Я даже не знаю с чего начать .. Спасибо

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Проблема заключалась в том, что я не связывал выпуск карты mapView с объектом RMMapView в раскадровке.Сейчас это работает.

0 голосов
/ 29 февраля 2012

В вашем методе -[ParkerAssistantFirstViewController viewDidLoad] вы отправляете сообщение recalculateGeometry экземпляру RMPath.RMPath затем устанавливает границы CALayer.

Глядя на сообщение об исключении, мы видим, что RMPath устанавливает границы слоя для прямоугольника [inf inf; nan nan].Слово inf означает «бесконечность», поэтому происхождение вашего прямоугольника находится на бесконечности.Слово nan означает «не число», поэтому размер вашего прямоугольника полностью неверен.Вот на что CALayer жалуется.

Глядя на переменные в вашем первом редактировании, я вижу, что scale равно 0. Это подозрительно.Если это коэффициент масштабирования вида, то он, вероятно, недействителен.Если это то, что вы контролируете, попробуйте установить его на 1 (или другое небольшое положительное число).

0 голосов
/ 28 февраля 2012

Вы связали QuartzCore.framework? Я уверен, что CALayer требует QuartzCore. Вы можете сделать это, выбрав пункт Target -> Build Phases - Link Binary with Libraries. щелкните знак плюса, прокрутите вниз и выберите QuartzCore, чтобы связать его с вашим проектом.

Linking quartzCore Framework

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...