簡體   English   中英

CATextLayer中的NSAttributedString導致EXC_BAD_ACCESS(ios 5.0)

[英]NSAttributedString in CATextLayer causes EXC_BAD_ACCESS (ios 5.0)

我很難與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個小時,仍然不知道發生了什么。

UPDATE

似乎問題是基於這條線

    NSDictionary * attrs = @{(NSString *)kCTFontAttributeName:font};

因為當我刪除Font屬性並添加ForegroundColor屬性時,它突然開始工作。 我會盡力深入挖掘,但仍希望得到一些幫助。

如果您直接使用Core Text,則必須使用CTFont,而不是UIFont。 它們相互兼容(即它們之間沒有免費的橋接)。

我花了一整天時間發現這個。 我的問題就像你現在所經歷的那樣!

不幸的是,很棒的NSAttributedString東西只是iOS 6。 因此,如果您想制作多字符串並在iOS 5中顯示它,那么您所做的就是正確的。 但您必須僅使用與iOS 5兼容的呼叫。

下面是一些典型的代碼,用於制作與CoreText一起使用的NSAttributedString,並且可以在iOS 5上由CATextLayer顯示:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/iOS5bookExamples/ch23p689styledText1/p579p593styleText1/RootViewController.m

EXC_BAD_ACCESS異常是內存問題,通常是對象(早期)發布問題,即訪問已釋放的對象。

如果您沒有打開NSZombies,請執行此操作然后重試。 這里肯定有很多與他們有關的帖子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM