* 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
解决方法:
实际标题已经很清楚的写到:>* 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,从而导致程序崩溃。
总结一下,如果程序总出现上述崩溃信息,就是在某个地方除以0了
。