By Hoshino

0

CGFontCreateWithDataProviderで固まるバグの対処方法(objective-c)

Categories : Objective-C

こんにちは♪
最近は寝てる時間以外の90%近くをパソコンの
画面を見て過ごしているあっきぃさんもといひっきぃさんです。よろぴこっ♪

iPhoneアプリの話なんですが、
フォントファイルってあるじゃないですか。
hogehoge.otfとかmukimuki.ttfとかとかとか。

アプリによっては
色々なフォントが使えるとかわいいですよね。
しかしフォントファイルは思いのほか重いのです。

きゃぁー、これもかわいいー
おお、これなんかカッコいいなー
なぁんてほいほいXcodeちゃんに組み込んでいったらあっという間に50MB超えてしまう…
(50MBを超えるとユーザーはwifi環境でないとインストール出来なくなってしまう。

そこでフォントファイルをダウンロードして読み込めばいいのだっ

ってな発想になるわけですね♪

ダウンロードしたフォントファイルを
ドキュメント下とかに置いといて、#import <CoreText/CoreText.h>して

//pathはダウンロードしたフォントファイルまでのpath
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
@try {
        CFErrorRef error;
        CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
        CGFontRef font = CGFontCreateWithDataProvider(provider);
        if(!CTFontManagerRegisterGraphicsFont(font, &error;)){
                CFStringRef errorDescription = CFErrorCopyDescription(error);
                CFRelease(errorDescription);
        }
        CFRelease(font);
        CFRelease(provider);
}
@catch (NSException *exception) {
        NSLog(@”このフォントはもう…もう…”);
}

的な感じで読み込みが出来るわけでーす♪
なるほどふふふーん♪

じゃぁこれをAppDelegateとかで起動時に走らせればいいかなー
と思ったのですが、何故か固まるという…

なぜ…
なぜなの…?!
落ちるとかではなく完全なるフリーズ

ダウンロードしたフォントファイルが壊れているのかっ。
日頃の行いが悪いのかっ。とかなんとか思ったんですが違うみたい。

解決方法としては読み込む前に一行足すだけ。

[UIFont systemFontOfSize:10];

読み込む前に一度でもUIFont系を実行しないとだめみたい。
UIFont系を呼び出した時に始めてXcodeに組み込んであるフォントファイルとかも読み込むようで、そこらへんと関係してる気がする。

はまっている方に参考になればと♪

ではでは♪