2012-05-30 73 views
2

我對Core Text相當陌生。我有兩個原因字符串,有誰只有一個區別,在第二個例子中,第一個字符設置爲宋體斜體大小22爲什麼在設置斜體字體時CTFramesetterCreateWithAttributedString會崩潰?

第一個沒有問題通過 CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedText)去; ,但第二個noe使用EXC_BAD_ACCESS崩潰。

任何想法爲什麼第二個崩潰時,我所做的只是添加斜體verdana第一個字符?

pCO{ 
    CTForegroundColor = "<CGColor 0x8664bb0> [<CGColorSpace 0x816eef0> (kCGColorSpaceDeviceGray)] (0 1)"; 
    NSFont = "CTFont <name: Verdana, size: 22.000000, matrix: 0x0>\nCTFontDescriptor <attributes: <CFBasicHash 0x835a240 [0x13fab48]>{type = mutable dict, count = 1,\nentries =>\n\t1 : <CFString 0x278c40 [0x13fab48]>{contents = \"NSFontNameAttribute\"} = <CFString 0x86566e0 [0x13fab48]>{contents = \"Verdana\"}\n}\n>"; 
    NSParagraphStyle = "CTParagraphStyle:\nwriting direction = -1, alignment = 2, line break mode = 4, default tab interval = 0\nfirst line head indent = 0, head indent = 0, tail indent = 0\nline height multiple = 0, maximum line height = 0, minimum line height = 0\nline spacing adjustment = 0, paragraph spacing = 0, paragraph spacing before = 0\ntabs:\n<CFArray 0x8659590 [0x13fab48]>{type = immutable, count = 12, values = (\n\t0 : CTTextTab: location = 28, alignment = 0, options = (none)\n\n\t1 : CTTextTab: location = 56, alignment = 0, options = (none)\n\n\t2 : CTTextTab: location = 84, alignment = 0, options = (none)\n\n\t3 : CTTextTab: location = 112, alignment = 0, options = (none)\n\n\t4 : CTTextTab: location = 140, alignment = 0, options = (none)\n\n\t5 : CTTextTab: location = 168, alignment = 0, options = (none)\n\n\t6 : CTTextTab: location = 196, alignment = 0, options = (none)\n\n\t7 : CTTextTab: location = 224, alignment = 0, options = (none)\n\n\t8 : CTTextTab: location = 252, alignment = 0, options = (none)\n\n\t9 : CTTextTab: location = 280, alignment = 0, options = (none)\n\n\t10 : CTTextTab: location = 308, alignment = 0, options = (none)\n\n\t11 : CTTextTab: location = 336, alignment = 0, options = (none)\n\n)}"; 
}2{ 
    NSSuperScript = "-1"; 
} 

p{ 
    NSFont = "<UICFFont: 0x8484240> font-family: \"Verdana\"; font-weight: normal; font-style: italic; font-size: 22px"; 
}CO{ 
    CTForegroundColor = "<CGColor 0x847e820> [<CGColorSpace 0x8426810> (kCGColorSpaceDeviceGray)] (0 1)"; 
    NSFont = "CTFont <name: Verdana, size: 22.000000, matrix: 0x0>\nCTFontDescriptor <attributes: <CFBasicHash 0x832ecb0 [0x13fab48]>{type = mutable dict, count = 1,\nentries =>\n\t1 : <CFString 0x278c40 [0x13fab48]>{contents = \"NSFontNameAttribute\"} = <CFString 0x847ccb0 [0x13fab48]>{contents = \"Verdana\"}\n}\n>"; 
    NSParagraphStyle = "CTParagraphStyle:\nwriting direction = -1, alignment = 2, line break mode = 4, default tab interval = 0\nfirst line head indent = 0, head indent = 0, tail indent = 0\nline height multiple = 0, maximum line height = 0, minimum line height = 0\nline spacing adjustment = 0, paragraph spacing = 0, paragraph spacing before = 0\ntabs:\n<CFArray 0x847ee20 [0x13fab48]>{type = immutable, count = 12, values = (\n\t0 : CTTextTab: location = 28, alignment = 0, options = (none)\n\n\t1 : CTTextTab: location = 56, alignment = 0, options = (none)\n\n\t2 : CTTextTab: location = 84, alignment = 0, options = (none)\n\n\t3 : CTTextTab: location = 112, alignment = 0, options = (none)\n\n\t4 : CTTextTab: location = 140, alignment = 0, options = (none)\n\n\t5 : CTTextTab: location = 168, alignment = 0, options = (none)\n\n\t6 : CTTextTab: location = 196, alignment = 0, options = (none)\n\n\t7 : CTTextTab: location = 224, alignment = 0, options = (none)\n\n\t8 : CTTextTab: location = 252, alignment = 0, options = (none)\n\n\t9 : CTTextTab: location = 280, alignment = 0, options = (none)\n\n\t10 : CTTextTab: location = 308, alignment = 0, options = (none)\n\n\t11 : CTTextTab: location = 336, alignment = 0, options = (none)\n\n)}"; 
}2{ 
    NSSuperScript = "-1"; 
} 

乾杯

+0

我發現了一個提示:NSFont是UICFFont在一個和CTFont在另一個。查找如何將UICFFont轉換爲CTFont :-) – niklassaers

回答

7

這裏仔細閱讀了幾個答案後,我注意到,我使用的UIFont代替CTFont。將您的UIFont到CTFont這樣的:

CTFontRef CTFontCreateFromUIFont(UIFont *font) 
{ 
    CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)font.fontName, 
              font.pointSize, 
              NULL); 
    return ctFont; 
} 

然後將其添加到您的NSAttributedString這樣

CTFontRef italicFont = CTFontCreateFromUIFont(italicUIFont); 
[aStr addAttribute:(NSString*)kCTFontAttributeName value:(__bridge id)italicFont range:NSMakeRange(0,5)]; 

瞧,它不會再崩潰,並顯示像我想它。 :-)

乾杯

+0

剛剛救了我大約2小時的痛苦 - 謝謝 –

相關問題