0

我有以下堆栈跟踪,似乎无法弄清楚 coretext 崩溃的原因:

在此处输入图像描述

-(CGSize)sizeConstrainedToSize:(CGSize)maxSize fitRange:(NSRange*)fitRange {
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString
                                                ((CFAttributedStringRef)self);
    CFRange fitCFRange = CFRangeMake(0,0);
    CGSize sz = CTFramesetterSuggestFrameSizeWithConstraints
                      (framesetter,CFRangeMake(0,0),NULL,maxSize,&fitCFRange);
    if (framesetter) CFRelease(framesetter);
    if (fitRange) *fitRange = NSMakeRange(fitCFRange.location, fitCFRange.length);
    // take 1pt of margin for security
    return CGSizeMake( floorf(sz.width+1) , floorf(sz.height+1) ); 
}
4

2 回答 2

0

的值kCTFontAttributeName必须是 a CTFontRef,而不是UIFont指针。没有将 a 转换为 的公共函数UIFontCTFontRef因此您需要使用 来创建它CTFontCreateWithName,可能像这样:

UIFont *uiFont = ...;
CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)uiFont.fontName, uiFont.pointSize, NULL);
于 2012-06-18T05:53:50.467 回答
0

根据您的堆栈跟踪,您似乎因从辅助线程调用 CTFramesetterCreateWithAttributedString() 而崩溃。请参阅CoreText 在多线程中运行时崩溃,以及此处的 Apple 文档,其中指出与排版器相关的 API 不是线程安全的。

于 2013-06-28T08:22:05.360 回答