CALayerInvalidGeometry'CALayerInvalidGeometry"
Я делаю приложение представления с вкладками и использую API CloudMade. У меня есть рабочий проект в приложении с одним представлением, который я пытаюсь скопировать в одно представление с вкладками.
Я скопировал и вставил все, настроил настройки проекта и все. Представление с вкладками FirstViewController точно такое же, как и старое приложение с одним представлением. Однако когда я запускаю приложение, я получаю эту ошибку:
Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [inf inf; nan nan]'
Я пытался гуглить, но ничего не вышло. Это мое первое приложение с вкладками, поэтому я не уверен, есть ли что-то, на что я должен обратить внимание. Я даже не уверен, какой раздел кода или отчет об ошибке вставить сюда. Любая помощь будет оценена! Большое спасибо!
РЕДАКТИРОВАТЬ 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 не работает (с вкладками и один вид) Я даже не знаю, с чего начать.. Спасибо
3 ответа
Проблема заключалась в том, что я не связывал выпуск карты mapView с объектом RMMapView в раскадровке. Теперь это работает.
В вашем -[ParkerAssistantFirstViewController viewDidLoad]
метод, вы отправляете recalculateGeometry
сообщение экземпляру RMPath
, RMPath
затем устанавливает границы CALayer
,
Глядя на сообщение об исключении, мы видим, что RMPath
устанавливает границы слоя в прямоугольник [inf inf; nan nan]
, Слово inf
сокращение от "бесконечность", поэтому происхождение вашего прямоугольника находится на бесконечности. Слово nan
означает "не число", поэтому размер вашего прямоугольника полностью неверен. Что это CALayer
жалуется на.
Глядя на переменные в вашем первом редактировании, я вижу, что scale
0. Это подозрительно. Если это коэффициент масштабирования вида, то он, вероятно, недействителен. Если это то, что вы контролируете, попробуйте установить его на 1 (или другое небольшое положительное число).
Вы связали QuartzCore.framework? Я уверен, что CALayer требует QuartzCore. Вы можете сделать это, выбрав пункт Target -> Build Phases - Link Binary with Libraries. щелкните знак плюса, прокрутите вниз и выберите QuartzCore, чтобы связать его с вашим проектом.