【问题标题】:Xcode 6.3 (and 6.2) hits breakpoint on [UIFont fontWithName: size:]Xcode 6.3(和 6.2)在 [UIFont fontWithName: size:] 上命中断点
【发布时间】:2015-07-04 15:25:37
【问题描述】:

在我的 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: size:]; 调用,并且断点仅在第一次调用时命中。(如果我评论第一个然后下一个方法调用命中断点)。这个断点问题真的很烦人,任何帮助将不胜感激。

【问题讨论】:

  • 看起来你不小心放了一个断点。一直发生在我身上。您将在文本编辑器停止的行(UIFont 行)左侧的灰色区域看到一个图标。右键单击该图标并点击删除断点。

标签: ios objective-c iphone xcode xcode6


【解决方案1】:

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

除非您有需要调试的特定 C++ 异常,因为它实际上会导致问题,否则最好将该断点配置为仅在 Objective-C 异常而不是 C++ 异常上中断。可以安全地忽略 C++ 异常。

【讨论】:

  • 是的,这就是问题所在,我已经编辑了异常断点并选择了目标 c,然后问题就消失了。我注意到如果我有时在main.m 文件上选择所有异常,断点也会命中。
【解决方案2】:

当您添加所有异常断点时,总是会发生这种情况。在这里,您只需要添加objective-c 断点。 请按以下步骤操作:

  1. 选择断点调试器,右键单击“所有异常”。

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

  2. 将异常类型更改为“Objective-c 异常”

【讨论】:

    【解决方案3】:

    起初。当然是异常断点。您可以在“断点选项卡”中添加或删除它。我的截图可以帮到你。

    产生这个异常的原因:

    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]);
            }
        }
    }
    

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

    【讨论】:

    【解决方案4】:

    如果不是您设置了断点 - 它可能与调用 init 中的方法有关。 unsafe calls to self

    另请参阅我关于 font caching and loading 的笔记。

    【讨论】:

      【解决方案5】:

      我也遇到了这个问题,并且在不更改断点设置的情况下解决了这个问题。就我而言,问题在于我的应用程序有一个框架,其 info.plist 文件列出了一个提供的字体,该字体也被应用程序本身列为提供的字体(在Fonts provided by application 中)。删除重复项解决了此问题。

      【讨论】:

        猜你喜欢
        • 2012-05-02
        • 2012-06-20
        • 2013-07-07
        • 2015-09-29
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 2016-01-08
        相关资源
        最近更新 更多