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