0

我正在制作一个选项卡式视图应用程序并使用 CloudMade 的 API。我在单个视图应用程序中有一个工作项目,我尝试将其复制到选项卡式视图之一。

我复制并粘贴了所有内容,设置了项目首选项和所有内容。选项卡式视图 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 不起作用(选项卡式和单一视图)我 至不知道从哪里开始.. 谢谢

4

3 回答 3

1

问题是我没有将地图出口 mapView 链接到情节提要中的 RMMapView 对象。现在它正在工作。

于 2012-02-29T01:09:24.460 回答
0

在您的-[ParkerAssistantFirstViewController viewDidLoad]方法中,您将recalculateGeometry消息发送到RMPath. RMPath然后设置 a 的边界CALayer

查看异常消息,我们可以看到RMPath将图层的边界设置为矩形[inf inf; nan nan]。这个词inf是“infinity”的缩写,所以你的矩形的原点是无穷大。这个词的nan意思是“不是数字”,所以你的矩形大小是完全无效的。这就是CALayer抱怨的地方。

查看您第一次编辑中的变量,我发现它scale是 0。这很可疑。如果这是视图的缩放因子,那么它可能无效。如果这是您控制的,请尝试将其设置为 1(或其他一些小的正数)。

于 2012-02-28T23:10:27.217 回答
-1

您是否链接了 QuartzCore.framework?我很确定 CALayer 需要 QuartzCore。您可以通过选择 Target --> Build Phases Tab -- Link Binary with Libraries 来执行此操作。单击加号,然后向下滚动到底部并选择 QuartzCore 将其链接到您的项目。

链接quartzCore框架

在此处输入图像描述

于 2012-02-28T17:43:14.540 回答