[英]Potential causes for EXC_BAD_ACCESS exception in PhoneGap app for iOS?
[英]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顯示:
EXC_BAD_ACCESS
異常是內存問題,通常是對象(早期)發布問題,即訪問已釋放的對象。
如果您沒有打開NSZombies,請執行此操作然后重試。 這里肯定有很多與他們有關的帖子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.