Dis*_*Dev 11 fonts objective-c freeze ios
当我CGFontCreateWithDataProvider 在飞机模式下拨打电话时,我的应用会冻结.不是飞机模式,它工作正常.字体存储在设备上,不应该发生网络访问.
在调用此方法加载本地字体文件时:
[self registerIconFontWithURL:[[NSBundle mainBundle] URLForResource:@"FontAwesome" withExtension:@"otf"]];
Run Code Online (Sandbox Code Playgroud)
的值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);
}
Run Code Online (Sandbox Code Playgroud)
iOS 7.1.x,iPhone 5.
我不知道为什么会发生这种情况并且无法找到任何帮助.有没有人知道为什么会发生这种情况?
提前致谢!
Dis*_*Dev 26
经过一番搜索,我找到了答案.
根据以下错误报告:https://alpha.app.net/jaredsinclair/post/18555292
如果没有网络连接,如果在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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |