3

我有一些代码来设置 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 (code=1,地址=0x10)”。它在最后的 '...setAttributes...' 行中断。有一次,我尝试使用 initWithString:attributes: 方法来初始化 attribTitle,果然崩溃(当它发生时)在 alloc-init 行上。

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

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

谢谢!

托德。

4

1 回答 1

1

这是您运行的代码吗,是否简化了?事实上,对我来说它看起来不错(我敢说)。当它每隔一次崩溃时,这表明其他情况,这在此处的代码中不可见。

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

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

于 2012-05-13T14:41:04.843 回答