我很难与CoreText合作。 不知道,如果我做错了什么,或者它是不是iOS'自己的错误,但这里有我所拥有的: 在iOS 5.0中,此代码在显示视图时使应用程序崩溃
- (void)viewDidLoad
{
[super viewDidLoad];
UIFont * font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
NSDictionary * attrs = @{(NSString *)kCTFontAttributeName:font};
NSAttributedString * attrStr = [[NSAttributedString alloc] initWithString:@"Test" attributes:attrs];
CATextLayer * textLayer = [[CATextLayer alloc] init];
textLayer.frame = self.view.frame;
textLayer.string = attrStr;
[self.view.layer addSublayer:textLayer];
}
它生成EXC_BAD_ACCESS并打开CoreText TAttributes::TAttributes(__CFDictionary const*):
,显示发生异常的汇编程序行。
我做错了吗?我挣扎了近8个小时,仍然不知道发生了什么。
更新
似乎问题是以某种方式基于这一行
NSDictionary * attrs = @{(NSString *)kCTFontAttributeName:font};
因为当我删除Font属性并添加ForegroundColor属性时,它突然开始工作。我会尝试深入挖掘,但仍希望得到一些帮助。
答案 0 :(得分:3)
如果您直接使用Core Text,则必须使用CTFont,而不是UIFont。它们不相互兼容(即它们之间没有免费的桥接)。
我花了一整天时间发现这个。我的问题就像你现在所经历的那样!
不幸的是,很棒的NSAttributedString东西只是iOS 6。因此,如果您想制作多字符串并在iOS 5中显示它,那么您所做的就是正确的。但您必须仅使用与iOS 5兼容的电话。
这是一些典型的代码,用于制作与CoreText一起使用的NSAttributedString,并且可以在iOS 5上由CATextLayer显示:
答案 1 :(得分:0)
EXC_BAD_ACCESS
异常是内存问题,通常是对象(早期)发布问题,即访问已释放的对象。
如果您没有打开NSZombies,请执行此操作然后重试。这里肯定有很多与他们有关的帖子。