在我的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];
行上遇到断点,应用程序继续运行而不会崩溃,我的字体property(self.smallButtonFont
)已成功初始化。
我注意到了另一件事,我有几次[UIFont fontWithName: size:];
次调用和断点点击只是第一次调用。(如果我评论第一次,那么下一次方法调用就会触及断点)。这真的很烦人这个断点问题,任何帮助都会感激不尽。
答案 0 :(得分:22)
您已在Xcode中添加了断点异常,并将其配置为在所有异常类型(C ++和Objective-C)上中断。问题是C ++代码有时会在非异常情况下使用异常。它可以用它作为一种流量控制或返回"失败"来自一个功能。
除非您有一个需要调试的特定C ++异常,因为它实际上导致了问题,否则最好将该断点配置为打破Objective-C异常而不是C ++异常。可以安全地忽略C ++异常。
答案 1 :(得分:5)
添加All Exceptions断点时总是会发生这种情况。在这里,您只需要添加objective-c断点。 请按照以下步骤操作:
答案 2 :(得分:1)
起初。当然这是异常断点。您可以在" Breakpoints选项卡"中添加或删除它。我的截图可以帮助您。
产生此异常的原因:
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]);
}
}
}
祝你好运。如果您还有这个问题,请添加一些信息。
答案 3 :(得分:0)
如果不是你设置了一个断点 - 它可能与在init中调用方法有关。 unsafe calls to self
另见我关于font caching and loading的说明。
答案 4 :(得分:0)
我也有这个问题,并在不改变断点设置的情况下解决了这个问题。在我的情况下,问题是我的应用程序有一个框架,其info.plist文件列出了一个提供的字体,该应用程序本身也列为提供的字体(在Fonts provided by application
中)。删除副本修复了此问题。