inv*_*ent 52 xcode objective-c xcode6 ios8
我正在使用Xcode 6(通用汽车,我没有下载测试版),我正在为iOS 7+开发应用程序.对于我的所有项目,我只是打开了我曾经在Xcode 5中工作的相同项目.
在Breakpoint导航器中,我有All Exceptions
断点.它被设置为Break: On Throw
.现在,每次我运行我的应用程序(无论是在设备上还是在模拟器中),它都会停止return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
在main()
函数中的行上执行.
如果我按Play继续执行程序两次,程序运行正常.所以这并不妨碍我工作,但每次手动播放执行并重置我的编辑器都很烦人.
我喜欢我在Xcode中设置的行为(将当前编辑器带到执行暂停的位置),并且让All Exceptions
断点成为重要的IMO.(所以我不想改变那些)
通过使用相同的环境运行相同的代码,对于iOS 7目标(再次,设备或模拟器),不会抛出异常.
有什么可能导致这种奇怪行为的线索?
Joh*_*who 100
如评论中所述,您应该通过编辑All Exceptions断点来关闭捕获C++异常.
为此,右键单击断点并将Exception从All更改为Objective-C:
C++代码中的异常是普通应用程序功能的一部分.但是,异常断点没有捕获未处理但是每个引发的异常,即使它们稍后被正确处理,因此停止执行.
And*_*tis 31
TLDR; 在我的情况下,问题的原因是缺少字体.
我也有这个问题.虽然@Johnnywho只为Objective-C留下Exception Breakpoint是正确的,但是停止了不需要的行为,它仍然没有解释什么是真正的原因,为什么它在iOS7上毫无例外地运行,为什么这只发生在某些项目上.
这就是为什么我继续解析我遇到这个问题的一个项目,直到我能够找到原因.我想这种行为可能有多个原因,但在我的情况下,缺少自定义字体.
快速测试方法:
启动一个新的单一视图项目
在所有异常上启用断点,包括C++(Breakpoints/+/Add Exception Breakpoint)
将一些自定义字体拖入项目(允许复制并检查目标以将其添加到)
在主视图控制器中为视图添加标签
选择标签的自定义字体(在Xcode 6+上,一旦将其拖入项目中,它应该显示在字体选择器中).
运行应用程序并确认您在自定义字体中看到标签(似乎我们不需要在Info.plist中为键"应用程序提供的字体"添加字体文件名称,如果自定义字体已经用于应用程序的xib的故事板).
现在从项目中删除自定义字体(通过取消目标关系或在目标设置中删除它/构建阶段/复制捆绑资源)
从您的设备或SIM卡中删除应用程序(从应用程序包中删除字体文件)
产品/清洁
再次运行应用程序(现在标签仍然具有对自定义字体的引用,但应用程序没有该文件).如果你在iOS8上运行,你应该注意到这个神秘的异常.
使用iOS7运行应用程序或使用iOS7运行应用程序(您需要将iOS部署目标更改为iOS7).虽然标签不会显示自定义字体,但不会有例外.
将字体文件添加回目标,断点不再在运行时停止.
所以我的结论是,在iOS8上,丢失的字体会导致C++异常,而在iOS7上却没有,因此断点触发器.
类似的异常(和断点触发器)也可能是由Info.plist文件中的错误编写的字体文件名引起的,该键是"应用程序提供的字体".
归档时间: |
|
查看次数: |
9349 次 |
最近记录: |