CGFontCreateWithDataProvider以飞行模式挂起

当我在飞行模式下调用CGFontCreateWithDataProvider ,我的应用程序将冻结。 不在飞行模式,它工作正常。 字体存储在设备上,不应该发生networking访问。

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

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

url的值如下: file:///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。

我不知道为什么会发生这种情况,并没有find任何帮助。 有没有人有一个线索为什么会发生这种情况?

提前致谢!

我找了一个更多的search后的答案。

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

如果没有networking连接, 如果在appDidFinishLaunchingWithOptions期间被调用,则CGFontCreateWithDataProvider()挂起在信号量陷阱中。 在下一次运行循环中调用它可以不用挂起。

正如在同一篇文章中指出的那样,

[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); }