Xcode 6.3(和6.2)在上遇到断点

在我的iOS应用程序中使用类(DKTheme)将我的字体和图像保存在一个集中的位置。 我的实现看起来像这样。

+ (instancetype)theme { static DKTheme *_theme = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _theme = [[DKTheme alloc] init]; }); return _theme; } - (id)init { self = [super init]; if (self) { [self setupTheme]; } return self; } - (void)setupTheme { // some code here self.smallButtonFont = [UIFont fontWithName:@"Helvetica-Bold" size:13.0f]; //some code here } 

当我在设备(iPhone 5C,iOS8.3和iOS8.2)中运行此代码时,xcode self.smallButtonFont = [UIFont fontWithName:@"Helvetica-Bold" size:13.0f];行点self.smallButtonFont = [UIFont fontWithName:@"Helvetica-Bold" size:13.0f]; 如果我单击继续执行按钮,应用程序继续运行而不会崩溃,我的字体属性( self.smallButtonFont )已成功初始化。

断点

调用堆栈

我注意到了另外一件事,我有几个[UIFont fontWithName: size:]; 呼叫和断点仅在第一次呼叫时命中。(如果我评论第一个,则下一个方法呼叫命中断点)。 这真的很烦人这个断点问题,任何帮助都会感激不尽。

您已在Xcode中添加了断点exception,并将其配置为在所有exception类型(C ++和Objective-C)上中断。 问题是C ++代码有时会在非特殊情况下使用exception。 它可以将它用作流控制的一种forms或从函数返回“失败”。

除非你有一个特定的C ++exception需要调试,因为它实际上导致了一个问题,所以最好配置那个断点来打破Objective-Cexception而不是C ++exception。 可以安全地忽略C ++exception。

添加All Exceptions断点时总是会发生这种情况。 在这里,您只需要添加objective-c断点。 按着这些次序:

  1. 选择Breakpoints debugger,右键单击“All Exceptions”。

在此处输入图像描述

  1. 现在选择单击“编辑断点”

  2. 将exception类型更改为“Objective-c Exception”

在此处输入图像描述

首先。 当然是exception断点。 您可以在“断点”选项卡中添加或删除它。 我的截图可以帮助您。

在此处输入图像描述

产生这种例外的原因:

你在iOS中有一些默认字体。 如果您尝试生成喜欢不可用的字体名称。 你看到这样的例外。 也许在你的代码中你使用另一个字体名称。 我的意思不仅仅是@“Helvetica-Bold”。 现在你有一个问题:我现在怎么样,我的操作系统中是否有字体可用。 您可以使用此方法打印所有可用字体:

 - (void)fontsList { NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; NSArray *fontNames; NSInteger indFamily, indFont; for (indFamily=0; indFamily<[familyNames count]; ++indFamily) { NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); fontNames = [[NSArray alloc] initWithArray:[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]]; for (indFont=0; indFont<[fontNames count]; ++indFont) { NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); } } } 

最好的祝福。 如果您仍然遇到此问题,请添加一些信息。

如果不是你设置了一个断点 – 它可能与在init中调用方法有关。 不安全的自我呼唤

另请参阅我关于字体缓存和加载的说明 。

我也有这个问题,并在不改变断点设置的情况下解决了这个问题。 在我的情况下,问题是我的应用程序有一个框架,其info.plist文件列出了一个提供的字体,该应用程序本身也列为提供的字体(在Fonts provided by applicationFonts provided by application )。 删除副本修复了此问题。