2012-01-28 12 views
12

で失敗し、私はXcodeの4.2に私のプロジェクトにカスタムフォントを追加しようとしているが、私はそれを使用しようとするたびに、私は、オブジェクトがnilであるとエラーが発生します。UIFontがnil

私が行っている次のように私の.plist価値「アプリケーションが提供するフォント」に行を追加しました 1)
:「LCDMono2 Ultra.ttf」
2)は私のサポートファイルにフォントを追加しましたし、それを示しました。追加されたことを確認するためのXCode。
3)フルネームは "ウルトラLCDMono2"
4であることをGet Infoを使用して検証は)と私のプロジェクトでフォントを作成:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16]; 

と私は、このバリアントを試してみた:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f]; 

5)'nil'エラーを生成する、フォント名(addObject:myFont.fontName)を使用しようとしました。

は、エラーの原因は何だろうか?名前の中のスペースのようなものでしょうか?

+3

あなたのフォントがOSによって実際に見えているかどうかを確認するには '[UIFont familyNames]'を使ってください。それは少なくとも物事を狭めるでしょう。 iOSは認識できないフォントファイルをいくつか持っていました。 – smparkes

+0

@smparkes - 私はあなたの返信を読む前にそれをしました!そして確かに、Xcodeは自動的にスペースを削除し、名前は "LCDMono2Ultra"として表示され、動作します。それはいつも通りじゃない?ありがとう。 – wayneh

+1

おそらくXcodeではありません。おそらくフォント名がフォントファイルにエンコードされているのでしょう。ちょっとしたヒント:iOSでは家族から2つの顔だけを読み込むことができるので、家族から2つ以上の顔を使用している場合は、各顔の姓を一意にする必要があります。それは追跡するためにしばらくかかった... – smparkes

答えて

12

フォントの完全名にスペースが自動的に削除されたを考えてみますプロジェクト。元のフォントファイルを確認したところ、スペースがあるので、Appleはスペースを扱う必要がありません。私は "LCDMono2Ultra"への参照を変更し、それは動作します。

+4

「スペースを扱いたくない」というのは、フォントのPostScript名を使用していると思います。 –

+4

David Dunhamが正しいです。一般的に、実際にコード内のフォントの名前をハードコードする場合は、そのフォントを参照するのに常に完全なPostScript名を使用する必要があります。 (スペースを許さないPostScript名そのものです)。それが何であるかわからない場合は、フォントブックでMacにフォントをインストールし、フォントブックで「プレビュー>フォント情報を表示」を選択して、PostScript名を含むさまざまな名前を表示します。 「LCDMono2 Ultra」のPostScript名は「LCDMono2Ultra」です。 – NSGod

+0

はい、そうです。私は私のシステムにフォントをインストールしなかったので、フォントブックからその情報を得ることができませんでした。私はそれをインストールした後、私はPostscriptの名前を見ることができます。ありがとう。 – wayneh

2

はあなたにブレークポイントを入れて、あなたがmyFontのために有効なUIFontオブジェクトを取得していることを確認しました。これは、 "LCDMono2 Ultra"が実際にフォントファミリ名であり、使用したいものが "LCDMono2 Ultra-normal"や "LCDMono2 Ultra-bold"のようなものである可能性が高いため、チェックする価値があります。フォントブックを使って.ttfを開き、それがあなたに与えた情報を見てください。また

あなたが呼び出し試みることができるフォント帳には何も見つけることができない場合:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"]; 

そしてちょうど彼らがどうあるべきかをチェックするためにデバッガで配列フォントを印刷します。

・ホープこのヘルプは、これが動作しない場合は私が知っていると私はそれを追加した後に他の何か:)

+0

ありがとう、しかし私は解決策を見つけました - 上記の私のコメントを参照してください。 – wayneh

8

私は数時間のためにこれと同じ問題を抱えていたし、上記のすべてを試したし、どれも働いていない、フォントはどこにでも追加されたことはなかったはずと私も他のアプリで働いていたフォントを試してみましたが、決してように見えましたこのアプリに追加されました。

Xcode 5で何かが変更されたように見えますが、これは「infoName-info.plist」の下の画像を参照してください。

・ホープこれは誰かに役立ちます。

enter image description here

+0

重要:拡張子を付けてファイル名全体を追加してください。 –

0

(多分別の名前を持つ)フォントを検索し、この名前を使用します。

for (NSString *familyName in [UIFont familyNames]) { 
     for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { 
      NSLog(@"%@", fontName); 
     } 
    } 
0

私のフォントファイルは "Futura Heavy.ttf"です。それから私は-を以下のようなスペースに置き換えて使用します。

class func futuraHeavy() -> UIFont { 
     return UIFont(name: "Futura-Heavy", size: 12)! 
    }