当我在飞行模式中拨打CGFontCreateWithDataProvider 时,我的应用程序卡住。不在飞行模式下,它可以正常工作。字体存储在设备上,不应进行网络访问。

在调用此方法以加载本地字体文件时:

[self registerIconFontWithURL:[[NSBundle mainBundle] URLForResource:@"FontAwesome" withExtension:@"otf"]];

以下方法中的url的值为:
文件:///var/mobile/Applications/48D3DA14-235B-4450-A081-7A6BA6116667/Blah.app/FontAwesome.otf
+ (void)registerIconFontWithURL:(NSURL *)url
{
    NSAssert([[NSFileManager defaultManager] fileExistsAtPath:[url path]], @"Font file doesn't exist");
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);

//******Freezes after the next line******
    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
//******FROZEN******

    CGDataProviderRelease(fontDataProvider);
    CFErrorRef error;
    CTFontManagerRegisterGraphicsFont(newFont, &error);
    CGFontRelease(newFont);
}

iOS 7.1.x,iPhone 5。

我不知道为什么会发生这种情况,而且还没有找到任何帮助。有人知道为什么会发生这种情况吗?

提前致谢!

最佳答案

经过更多搜索后,我找到了答案。

根据以下错误报告:https://alpha.app.net/jaredsinclair/post/18555292



如同一篇文章中所述,
[UIFont familyNames]
CGFontCreateWithDataProvider()之前

解决了问题。我的代码现在看起来像这样,可以按预期工作:

+ (void)registerIconFontWithURL:(NSURL *)url
{
    NSAssert([[NSFileManager defaultManager] fileExistsAtPath:[url path]], @"Font file doesn't exist");
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);

    //THE NEXT LINE IS RELEVANT PART
    [UIFont familyNames];

    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
    CGDataProviderRelease(fontDataProvider);
    CFErrorRef error;
    CTFontManagerRegisterGraphicsFont(newFont, &error);
    CGFontRelease(newFont);
}

关于ios - CGFontCreateWithDataProvider挂起飞行模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24900979/

10-10 14:01
查看更多