关于在iPad上调试UIAppFonts问题的建议

时间:2010-10-01 18:12:35

标签: ipad fonts plist freeze

我最近发现这篇文章似乎描述了我添加自己的ttf时遇到的同样问题。我的应用冻结了。然而,关于帖子的一些事情让我感到困惑,我很乐意帮助解读它。

帖子在这里:http://web.archiveorange.com/archive/v/nagQXB5eX3YsQpevIXMk

我想了解的相关段落如下:

  

附加调试器并暂停   该申请揭示了一个没有   特别有用的调用堆栈:

     __spin_lock 中的

0 0xffff028f      

1 ??

     

导致该问题的特定代码   问题:

     

CTFontCollectionRef collection =   CTFontCollectionCreateFromAvailableFonts(NULL);     CFArrayRef fonts =   CTFontCollectionCreateMatchingFontDescriptors(集合);         for(id fontDescRef in(NSArray   *)fonts){CFStringRef fontName = CTFontDescriptorCopyAttribute((CTFontDescriptorRef)fontDescRef,   kCTFontNameAttribute);的NSLog(@ “%@”,   的fontName); CFRelease(的fontName); }
    CFRelease(字体);

     

执行永远不会超越   第二行。

问题:他是如何找出造成问题的线路和功能的?这是否与显示反汇编,以混合模式显示或在地图文件中查找十六进制值有关?我想了解这是如何完成的。

  

被要求提供演示和   因此进一步调查,   我发现问题就出现了   如果代码在我的   应用中:didFinishLaunchingWithOptions:   但如果我有相同的东西,请不要   我的初始视图的viewDidLoad   控制器。

问题:他在这里指的是什么'代码'?问题与通过plist值添加自定义字体有关,所以我不确定他可能指的是什么或我如何解决我的问题。

请帮助!

1 个答案:

答案 0 :(得分:0)

好吧,没有关于弄清楚这篇文章的内容,但我确实在apple dev论坛上找到了一个人发布的解决方法。基本上,从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.h并将dlsym的结果转换为以下内容:

(BOOL()(const char ))

我没有改变原帖,以防这个错误只是影响我的事情。