什么样的问题会导致核心文本在调用“sizeThatFits”时崩溃



我看到过一些不同的崩溃报告,这些报告似乎都是在核心文本计算某些文本的大小以响应对[UIView sizeThatFits]的调用时触发的。 我怀疑崩溃有一些共同的原因,但我只有一些堆栈跟踪,我不知道如何自己重现任何问题,所以我只能猜测什么样的问题可能会触发崩溃。

在一种情况下,崩溃发生在ABPeoplePickerNavigationController中,堆栈上的代码完全是Apple代码。我已经审核了我的代码,以确保UIKit/Core Text仅从主线程使用。

我在 buzztouch 论坛上看到了这个诱人的堆栈跟踪,它看起来非常相似,并且还共享"联系人"触发器。

frame #0: 0x007fe283 CoreText`TComponentFont::GetMinSideBearing(CGAffineTransform const&, bool) const + 43 
frame #1: 0x0076b244 CoreText`TRun::GetLeftHangersGlyphCountAndWidth(long, unsigned long, TCharStream const&) const + 524 
frame #2: 0x0077e7da CoreText`TLine::GetLeftHangersGlyphCountAndWidth(unsigned long const*) const + 234 
frame #3: 0x0077e4b9 CoreText`TLine::GetBounds(unsigned long) const + 811 
frame #4: 0x0077ace6 CoreText`CTLineGetBoundsWithOptions + 44 
frame #5: 0x02059497 UIKit`-[UITableViewIndex _cacheAndMeasureTitles] + 984 
frame #6: 0x02059ace UIKit`-[UITableViewIndex sizeThatFits:] + 131

在论坛上,一个名叫Ofer的人留下了一条帖子,说崩溃已经修复。 我希望 Ofer 能好心地分享一些细节,说明他们发现他们正在做什么来触发崩溃!

就我而言,问题似乎源于我使用 FontAwesomeKit 库加载图标的方式,如他的"已知问题"中所述。我很幸运地让我的应用程序进入了可以定期重现问题的状态,并且应用建议的解决方法使问题消失(当然,据我所知,它可能只是隐藏)。

最新更新