iPhone SDK:断言失败 - [UILabel setFont:]

时间:2008-10-15 03:04:45

标签: iphone

我有一个iPhone应用程序可以编译并在我的笔记本电脑上的模拟器中正常运行。现在,我尝试在iMac上的模拟器中构建和运行相同的代码,它启动并让我单击一个按钮,但然后我得到一个断言失败。

以下是控制台中的内容:

*** Assertion failure in -[UILabel setFont:], /SourceCache/UIKit/UIKit-738/UILabel.m:438
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: font != nil'
Stack: (
2493366603,
2432871995,
2493366059,
2459146836,
817183141,
817926218,
837317240,
837317032,
837315376,
837314643,
2492860866,
2492867620,
2492869880,
85304,
85501,
816175835,
816221412,
9096,
8930
)

这是堆栈跟踪:

#0  0x949dbff4 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___
#1  0x9102ae3b in objc_exception_throw
#2  0x94962ad3 in CFRunLoopRunSpecific
#3  0x94962cf8 in CFRunLoopRunInMode
#4  0x00014d38 in GSEventRunModal
#5  0x00014dfd in GSEventRun
#6  0x30a5dadb in -[UIApplication _run]
#7  0x30a68ce4 in UIApplicationMain
#8  0x00002388 in main at main.m:16

我的代码不会直接调用setFont:。但是,这将是程序执行中的一个点,其中一些按钮第一次可见。

我用谷歌搜索了。一些有类似问题的人说,当他们编辑NIB,或改变他们的时区或其他奇怪时,这会被神奇地修复。

任何想法究竟是什么原因?

(请不要抱怨NDA。)


更新:如果我将某些按钮的字体从“TimesNewRomanPS-BoldMT”更改为“Times”,则断言失败不再发生。但为什么我不能使用iPhone上存在的所需字体安装在新机器上,并且可以在Interface Builder中选择?

5 个答案:

答案 0 :(得分:1)

如果您的xib文件中有UILabel,它们可能会以某种方式损坏,或者您可能已经设置了两台机器上不存在的字体(在编辑UILabel时可以使用command-T调出字体选择器;不确定是否可以设置非iPhone字体,但它可能是)。否则,尝试从xib文件中删除UILabel,直到它运行,这就是你的罪魁祸首。

答案 1 :(得分:1)

如果它不是UILabel,它可能是UIButton(包含UILable)等。

答案 2 :(得分:1)

有同样的问题,但在特殊情况下。只有当代码是为iOS 4编译但部署在3.1.3移除Arial-Narrow的设备上时才有效。

答案 3 :(得分:0)

并非iphone中都有,只有某些字体。

答案 4 :(得分:0)

我们遇到了这个问题,因为我们使用名为[UIFont fontWithName:fontSize:](带空格)的Helvatica Bold代替Helvetica-Bold(带破折号)。 Helvatica Bold显然适用于当前的操作系统版本,但不适用于iOS 3.1。 Helvetica-Bold似乎是正确的版本。