2010-10-01 54 views
0

我最近發現這篇文章似乎描述了我添加自己的ttf時遇到的問題。我的應用程序凍結。然而,有關這篇文章的一些內容讓我感到困惑,我很樂意幫助解讀它。在iPad上調試UIAppFonts問題的建議

的職位是在這裏:http://web.archiveorange.com/archive/v/nagQXB5eX3YsQpevIXMk

,我試圖瞭解相關段落低於:

附加調試和暫停 應用揭示了一個不 特別有用的調用堆棧:

0 __spin_lock

1 0xffff028f ??

引起該 問題具體代碼:

CTFontCollectionRef集合= CTFontCollectionCreateFromAvailableFonts(NULL); CFArrayRef fonts = CTFontCollectionCreateMatchingFontDescriptors(collection); (NSArray *)fonts){CFStringRef fontName = CTFontDescriptorCopyAttribute((CTFontDescriptorRef)fontDescRef, kCTFontNameAttribute); NSLog(@「%@」, fontName); CFRelease(的fontName); }
CFRelease(fonts);

執行永遠不會超出 第二行。

問題:他是怎麼知道哪一行和哪個函數導致這個問題的?這是否與顯示反彙編,混合模式顯示或在地圖文件中查找十六進制值有關?我想知道這是如何完成的。

已被要求提供一個演示和 因此具有進一步調查, 我發現,這個問題體現 如果代碼是在我的 應用中:didFinishLaunchingWithOptions: 但如果我也有同樣的東西在 viewDidLoad我的初始視圖 控制器。

問題:他在這裏指的是什麼'代碼'?這個問題與通過plist值添加自定義字體有關,所以我不確定他可以提及什麼或者我可以如何解決我的問題。

請幫忙!

+0

你有沒有找到解決這個問題的辦法? – 2010-10-20 17:47:17

+0

我不認爲蘋果修復了它,如果這就是你的意思。不過,我能夠在下面發佈的答案中使用解決方法。 – Joey 2010-10-20 19:58:15

回答

0

嗯,沒有任何關於解決這篇文章,但我找到了一個由蘋果開發論壇上的人發佈的解決方法。基本上,從applicationDidFinishLaunching fn中調用它:

- (NSUInteger) loadFonts { 
    NSUInteger newFontCount = 0; 
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"]; 
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String]; 
    if (frameworkPath) { 
      void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY); 
      if (graphicsServices) { 
       BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile"); 
       if (GSFontAddFromFile) 
        for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil]) 
         newFontCount += GSFontAddFromFile([fontFile UTF8String]); 
      } 
    } 

    return newFontCount; 
} 

並確保包含dlcfn。小時,以對dlsym的結果轉換爲以下內容:

(BOOL()(爲const char))

我並沒有改變原來的職位,以防萬一這個錯誤只是東西影響了我。