关于iOS的due to uncaught exception 'CALayerInvalidGeometry'错误

在iOS开发中很多时候会遇到一些不固定且难以摸透的错误,下面就来解释一下今天遇到的一个错误处理方法,错误代码如下:

2016-03-25 23:42:30.750 YXB[474:4168] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [nan 0; nan 15]'
*** First throw call stack:
(
	0   CoreFoundation                      0x000000010bdc1e65 __exceptionPreprocess + 165
	1   libobjc.A.dylib                     0x000000010b337deb objc_exception_throw + 48
	2   CoreFoundation                      0x000000010bdc1d9d +[NSException raise:format:] + 205
	3   QuartzCore                          0x000000010910e718 _ZN2CA5Layer10set_boundsERKNS_4RectEb + 226
	4   QuartzCore                          0x000000010910e9a9 -[CALayer setBounds:] + 154
	5   UIKit                               0x0000000109424eef -[UIView _createLayerWithFrame:] + 667
	6   UIKit                               0x00000001094254a8 UIViewCommonInitWithFrame + 714
	7   UIKit                               0x0000000109425184 -[UIView initWithFrame:] + 125
	8   UIKit                               0x000000010959db66 -[UIImageView initWithFrame:] + 75
	9   YXB                                 0x0000000107d9bd2b -[QiXinTableViewCell initWithStyle:reuseIdentifier:] + 3419
	10  UIKit                               0x00000001094dc5cb -[UITableView _dequeueReusableViewOfType:withIdentifier:] + 640
	11  YXB                                 0x0000000107d5c5ad -[InformationView tableView:cellForRowAtIndexPath:] + 109
	12  UIKit                               0x00000001094efe43 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 766
	13  UIKit                               0x00000001094eff7b -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
	14  UIKit                               0x00000001094c4a39 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2996
	15  UIKit                               0x00000001094f901c -[UITableView _performWithCachedTraitCollection:] + 92
	16  UIKit                               0x00000001094dfedc -[UITableView layoutSubviews] + 224
	17  UIKit                               0x000000010944d4a3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703
	18  QuartzCore                          0x000000010911759a -[CALayer layoutSublayers] + 146
	19  QuartzCore                          0x000000010910be70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
	20  QuartzCore                          0x000000010910bcee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
	21  QuartzCore                          0x0000000109100475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
	22  QuartzCore                          0x000000010912dc0a _ZN2CA11Transaction6commitEv + 486
	23  UIKit                               0x0000000109390f7c _UIApplicationHandleEventQueue + 7329
	24  CoreFoundation                      0x000000010bceda31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
	25  CoreFoundation                      0x000000010bce395c __CFRunLoopDoSources0 + 556
	26  CoreFoundation                      0x000000010bce2e13 __CFRunLoopRun + 867
	27  CoreFoundation                      0x000000010bce2828 CFRunLoopRunSpecific + 488
	28  GraphicsServices                    0x000000010e051ad2 GSEventRunModal + 161
	29  UIKit                               0x0000000109396610 UIApplicationMain + 171
	30  YXB                                 0x0000000107d85cbf main + 111
	31  libdyld.dylib                       0x000000010c7a092d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException


出现Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [nan 0; nan 15]'这个错误通常有以下两种原因:

1、在内部程序中使用了sizeWithFont方法动态计算文本所需要的宽、高,可此时的文本为空,计算出来的宽或高为0;

2、在程序中在设置控件大小或位置时是先通过取到图片的大小来根据图片大小来进行设置控件的大小、位置的,此时如果当图片如果图片没有取到图片的大小将会为0,此时如果又用其它数来除了图片的大小时将会出现此类错误;


解决方案:

1、遇到此类错误需要去检查自己是否使用了sizeWithFont这个方法,如果使用了这个方法需要去做一个判断是否是因为取到的内容为空此时计算而造成计算值为0,这样就能解决此类为题

2、如果没有使用sizeWithFont方法且出现此类错误,但使用了动态获取图片大小可去判断是否是因为某个图片没有取到而造成取到的图片大小为0造成的错误


总结:

造成此类错误的最终原因主要还是因为在某个地方除了0,这在数学中也是不符合数学的计算规则的


如有不明白的地方欢迎咨询:

QQ:294491256

Telephone:13390517636




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值