在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
1、在内部程序中使用了sizeWithFont方法动态计算文本所需要的宽、高,可此时的文本为空,计算出来的宽或高为0;
2、在程序中在设置控件大小或位置时是先通过取到图片的大小来根据图片大小来进行设置控件的大小、位置的,此时如果当图片如果图片没有取到图片的大小将会为0,此时如果又用其它数来除了图片的大小时将会出现此类错误;
解决方案:
1、遇到此类错误需要去检查自己是否使用了sizeWithFont这个方法,如果使用了这个方法需要去做一个判断是否是因为取到的内容为空此时计算而造成计算值为0,这样就能解决此类为题
2、如果没有使用sizeWithFont方法且出现此类错误,但使用了动态获取图片大小可去判断是否是因为某个图片没有取到而造成取到的图片大小为0造成的错误
总结:
造成此类错误的最终原因主要还是因为在某个地方除了0,这在数学中也是不符合数学的计算规则的
如有不明白的地方欢迎咨询:
QQ:294491256
Telephone:13390517636