NSMutableAttributedString安装期间的间歇性崩溃

时间:2012-05-12 21:49:41

标签: objective-c macos xcode4

我有一些代码来设置NSMutableAttributedString:

    NSMutableParagraphStyle *centred = [[NSMutableParagraphStyle alloc]init];
    [centred setAlignment:NSCenterTextAlignment];
    NSDictionary *attributes = [[NSDictionary alloc]initWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica bold" size:12],NSFontAttributeName,
                                [NSColor whiteColor],NSForegroundColorAttributeName,
                                [NSColor clearColor], NSBackgroundColorAttributeName, 
                                centred, NSParagraphStyleAttributeName,
                                nil];
    NSMutableAttributedString* attribTitle = [[NSMutableAttributedString alloc]initWithString:@"Foo"];
    [attribTitle setAttributes:attributes range:NSMakeRange(0, [[attribTitle string] length] - 1)];

我一直坐在我的应用程序的-awakeFromNib方法中,因为我没有任何问题就启动了项目,但就在今天我已经开始尝试在Xcode 4.3中运行应用程序而崩溃了“线程1:EXC_BAD_ACCESS(代码) = 1,地址= 0x10)“。它打破了最终的'... setAttributes ...'行。有一次,我尝试使用方法 - initWithString:attributes:初始化attribTitle,确定崩溃(当它发生时)在alloc-init线上。

我已经尝试清除Xcode重新启动但它仍然会发生在其他所有版本中...如果应用程序没有崩溃,那么attrbibuted字符串会按预期显示。

我想知道我是否有一个损坏的项目文件,但为了防止我做了一些愚蠢的事情,任何人都可以指出一个错误 - 大概是在'属性'NSDictionary中?

谢谢!

托德。

1 个答案:

答案 0 :(得分:1)

这是你运行的代码吗?它是简化的吗?事实上,它看起来很好(我敢说)。当它只是每隔一次崩溃时,这表示其他一些情况,这在代码中是不可见的。

你提到这是在-awakeFromNib: - 这个方法有可能运行两次吗?我曾经多次让我感到困惑,而且很容易发生这种情况。您在MainMenu.xib中创建一个窗口控制器作为IB对象,然后让所述窗口控制器通过-[super initWithWindowNibName:]在其自己的-init:中加载NIB。这为每个涉及的NIB调用-awakeFromNib一次。我在我的案例中创建了一些初始化问题的顺序,它显示了与你描述的类似的不确定行为。

我将代码移到了-windowWillLoad-windowDidLoad方法,这是每个窗口,因此没有这个问题。