- 2011-06-11 15:19:17.167 ***[930:707] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [160 nan]'
- *** Call stack at first throw:
- (
- 0 CoreFoundation 0x3365d64f __exceptionPreprocess + 114
- 1 libobjc.A.dylib 0x33aa0c5d objc_exception_throw + 24
- 2 CoreFoundation 0x3365d491 +[NSException raise:format:arguments:] + 68
- 3 CoreFoundation 0x3365d4cb +[NSException raise:format:] + 34
- 4 QuartzCore 0x361db61d _ZL18CALayerSetPositionP7CALayerRKN2CA4Vec2IdEEb + 140
- 5 QuartzCore 0x361db58b -[CALayer setPosition:] + 38
- 6 QuartzCore 0x361db4d7 -[CALayer setFrame:] + 390
- 7 UIKit 0x330eb455 -[UIView(Geometry) setFrame:] + 188
- 8 UIKit 0x3314854f -[UITableViewCell setFrame:] + 98
- 9 UIKit 0x33147b3b -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 850
- 10 UIKit 0x3314776b -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 34
- 11 UIKit 0x331400cd -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 936
- 12 UIKit 0x3313f27d -[UITableView layoutSubviews] + 140
- 13 UIKit 0x330eb5fb -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 26
- 14 CoreFoundation 0x335caf03 -[NSObject(NSObject) performSelector:withObject:] + 22
- 15 QuartzCore 0x361dcbb5 -[CALayer layoutSublayers] + 120
- 16 QuartzCore 0x361dc96d CALayerLayoutIfNeeded + 184
- 17 QuartzCore 0x361e21c5 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 212
- 18 QuartzCore 0x361e1fd7 _ZN2CA11Transaction6commitEv + 190
- 19 QuartzCore 0x361db055 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 56
- 20 CoreFoundation 0x33634a35 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 16
- 21 CoreFoundation 0x33636465 __CFRunLoopDoObservers + 412
- 22 CoreFoundation 0x3363775b __CFRunLoopRun + 854
- 23 CoreFoundation 0x335c7ec3 CFRunLoopRunSpecific + 230
- 24 CoreFoundation 0x335c7dcb CFRunLoopRunInMode + 58
- 25 GraphicsServices 0x3413041f GSEventRunModal + 114
- 26 GraphicsServices 0x341304cb GSEventRun + 62
- 27 UIKit 0x33114d69 -[UIApplication _run] + 404
- 28 UIKit 0x33112807 UIApplicationMain + 670
- 29 PXiPhone 0x000028df main + 70
- 30 PXiPhone 0x00002894 start + 40
- )
- terminate called after throwing an instance of 'NSException
某天。加完一个功能,在iPhone4上报以上异常。然后crash掉,iPhone3上没事。
百思不得其解,于是google之。看了一篇stackoverflow.com 的文章,说是某些地方代码除以0了,多见于自己定义的UITableView自己定义UITableViewCell高度的地方。如:tableView:heightForHeaderInSection:
或tableView:heightForFooterInSection:。
这两个delegate方法都没有地方须要除的。在细致看一下文章,说多见于适用sizeWithFont方法计算UILabel宽高的地方。恍然大悟,小弟有一个地方使用了UILabel来显示文本,须要用到sizeWithFont方法计算宽高的,在NSString为nil的时候,sizeWithFont会除以0了。
PS:在使用sizeWithFont计算UItabelView中label中字的长度时。因为表视图的cell是复用的,所以在计算label中的NSString的长度时,NSString可能为nil,此时可能会除以0。便会报错。