2011-09-28 48 views
0

我得到這個例外在的iOS 3.1.2,但在iOS 4的其運行微調的UILabel的字體,斷言失敗 - [的UILabel setfont程序:]

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: font != nil' 

的代碼行,

Outbound_Label.font = [UIFont fontWithName:@"DS-Digital" size:24]; 

其中DS-Digital是我的自定義字體。

+1

也許你應該檢查返回值,似乎沒有找到你的字體。更好地檢查資源文件是否包含在內。 –

回答

1

我的猜測是你的自定義字體沒有被實例化。

每當我有這樣一個問題,即有兩件事情發生:獲取字體和設置字體,我把它們分開來發現問題:

UIFont *font = [UIFont fontWithName:@"DS-Digital" size:24]; 
Outbound_Label.font = font; 

然後我就可以判斷錯誤所在容易與調試器或NSLog()

事實上,這是一種非常明確的方式來編寫代碼。我從不擔心優化,我只擔心清晰度和易維護性。後來如果我有性能問題,請查找真正的罪魁禍首並加以解決。代碼越清晰越容易。

在這樣的情況下,編譯器無疑會優化掉字體變量,所以沒有任何傷害。

看到這個:SO answer
希望使用自定義字體現在可以包括在他們的應用程序包的字體和通過在其Info.plist文件中UIAppFonts關鍵系統註冊這些字體的應用。這個鍵的值是一串字符串,標識應用程序包中的字體文件。系統看到密鑰時,會加載指定的字體並使其可供應用程序使用。

+0

我已經嘗試使用上述方法,但它在第二行崩潰。 –

+0

在第一行,完成nil或字體實例?如果完成,Outbound_Label有效嗎?順便說一下,什麼是Outbound_Label?編碼實踐是使變量駱駝大小寫以小寫字母開頭,類以大寫字母開頭。這使理解代碼更容易,ARC需要這種約定。 – zaph

+0

字體在第一行代碼中爲零,並且Outbound_Label也是UIalbel。你能告訴我這個零值有什麼可能的原因,因爲我已經在資源中添加了DS-DIGI.ttf。 –

1

[UIFont fontWithName:@"DS-Digital" size:24]返回零。因爲沒有可用於「DS-Digital」的字體(Apple supported font list)。所以它給了崩潰。

+0

我在資源中添加了一個帶有此名稱的自定義字體。 –