iOS程序崩溃 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 40]'

简介:

* Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 40]'

今天早上上班,发现程序就直接挂了,昨天调得好好的,怎么来上班就挂了呢?

栈信息打印如下:

2015-10-20 10:01:12.871 Putaoji[49129:1691777] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 40]' *** First throw call stack: (    0   CoreFoundation                      0x000000010df49f65 __exceptionPreprocess + 165    1   libobjc.A.dylib                     0x000000010d244deb objc_exception_throw + 48    2   CoreFoundation                      0x000000010df49e9d +[NSException raise:format:] + 205    3   QuartzCore                          0x000000010cc2f7e6 _ZN2CA5Layer12set_positionERKNS_4Vec2IdEEb + 152    4   QuartzCore                          0x000000010cc2f959 -[CALayer setPosition:] + 44    5   QuartzCore                          0x000000010cc2ffbd -[CALayer setFrame:] + 650    6   UIKit                               0x000000010e9673f7 -[UIView(Geometry) setFrame:] + 356    7   UIKit                               0x000000010ec50422 -[UIButton _setFrame:deferLayout:] + 125    8   UIKit                               0x000000010ec50522 -[UIButton setFrame:] + 178    9   Putaoji                             0x000000010ae41132 -[PTJInviteFriendsViewController createShareButtonWithFrame:atIndex:title:imageName:] + 690    10  Putaoji                             0x000000010ae4004b -[PTJInviteFriendsViewController setupUI] + 2715    11  Putaoji                             0x000000010ae3f5a4 -[PTJInviteFriendsViewController viewDidLoad] + 228    12  UIKit                               0x000000010ea59931 -[UIViewController loadViewIfRequired] + 1344    13  UIKit                               0x000000010ea5f923 -[UIViewController __viewWillAppear:] + 120    14  UIKit                               0x000000010ea8f18a -[UINavigationController _startCustomTransition:] + 1177    15  UIKit                               0x000000010ea9e7c7 -[UINavigationController _startDeferredTransitionIfNeeded:] + 712    16  UIKit                               0x000000010ea9f67d -[UINavigationController __viewWillLayoutSubviews] + 57    17  UIKit                               0x000000010ec3763d -[UILayoutContainerView layoutSubviews] + 248    18  UIKit                               0x000000010e97f11c -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710    19  QuartzCore                          0x000000010cc3836a -[CALayer layoutSublayers] + 146    20  QuartzCore                          0x000000010cc2cbd0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366    21  QuartzCore                          0x000000010cc2ca4e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24    22  QuartzCore                          0x000000010cc211d5 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277    23  QuartzCore                          0x000000010cc4e9f0 _ZN2CA11Transaction6commitEv + 508    24  UIKit                               0x000000010e8f853a _afterCACommitHandler + 174    25  CoreFoundation                      0x000000010de759d7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23    26  CoreFoundation                      0x000000010de75947 __CFRunLoopDoObservers + 391    27  CoreFoundation                      0x000000010de6b59b __CFRunLoopRun + 1147    28  CoreFoundation                      0x000000010de6ae98 CFRunLoopRunSpecific + 488    29  GraphicsServices                    0x0000000112b04ad2 GSEventRunModal + 161    30  UIKit                               0x000000010e8ce676 UIApplicationMain + 171    31  Putaoji                             0x000000010af306ff main + 111    32  libdyld.dylib                       0x000000010fe9d92d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

解决方法:

实际标题已经很清楚的写到:>* Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 40]'

意思是说程序崩溃是CALayer的位置中含有不存在的数,说白了就是你的View.frame 中计算的时候,有的地方除以0了。例如在我的程序中计算的时候:

 CGFloat leftSpace = 24.0f;    CGFloat width = SCREENWIDTH;    CGFloat itemWH = 80.0-22.0;    NSInteger count = shareTitleArray.count;    CGFloat innerSpace = (width -leftSpace*2 - itemWH *count)/(shareTitleArray.count -1);    for (int i = 0; i<shareTitleArray.count; i++)
    {        CGFloat x = leftSpace+i*(innerSpace+itemWH);        CGRect frame = CGRectMake(x, 11, itemWH, itemWH);
        [self createShareButtonWithFrame:frame atIndex:i title:shareTitleArray[i] imageName:shareImageArray[i]];
    }

仔细一看没有什么问题,但是如果shareTitleArray数组中的个数为1的情况的下,就会导致除以0,从而导致程序崩溃。











本文转自ljianbing51CTO博客,原文链接:http://blog.51cto.com/ljianbing/1744721 ,如需转载请自行联系原作者





相关文章
|
6月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
91 0
|
6月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
151 0
|
6月前
|
监控 测试技术 iOS开发
查看ios 应用程序性能
查看ios 应用程序性能
81 0
|
6月前
|
iOS开发 开发者
iOS移动应用程序的备案与SHA-1值查看
iOS移动应用程序的备案与SHA-1值查看
132 2
|
6月前
|
JSON JavaScript 安全
iOS 应用程序数据保护:如何保护 iOS 应用程序中的图片、资源和敏感数据
iOS 应用程序数据保护:如何保护 iOS 应用程序中的图片、资源和敏感数据
|
6月前
|
iOS开发 开发者 索引
批量上传 iOS 应用程序截图的实用技巧
批量上传 iOS 应用程序截图的实用技巧
|
6月前
|
iOS开发 开发者
iOS移动应用程序的备案与SHA-1值查看
iOS移动应用程序的备案与SHA-1值查看
79 0
|
6月前
|
安全 Java 数据安全/隐私保护
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
179 0
|
运维 安全 数据安全/隐私保护
iOS加固原理与常见措施:保护移动应用程序安全的利器
随着移动应用的普及和用户对数据安全的关注度提高,iOS加固成为了很多开发者和企业的必备工具。那么,iOS加固是如何保护应用程序的安全性的呢? iOS加固是指对OS应用程序进行一系列的安全措施,以提高其抗逆向工程、反编译和破解的能力。下面将介绍iOS加固的原理和常见的加固措施。
iOS加固原理与常见措施:保护移动应用程序安全的利器
|
11月前
|
iOS开发 开发者
📝iOS移动应用程序的备案与SHA-1值查看
在开发和发布移动应用程序时,进行App备案是非常重要的一步,它是确保您的应用在合规性方面符合相关法规的过程。同时,对于一些需要与第三方服务进行集成的情况,查看应用的SHA-1值也是必要的。本篇博客将向您展示如何进行iOS移动应用程序的备案,并查看SHA-1值。