我有一些代码来设置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中?
谢谢!
托德。
答案 0 :(得分:1)
这是你运行的代码吗?它是简化的吗?事实上,它看起来很好(我敢说)。当它只是每隔一次崩溃时,这表示其他一些情况,这在代码中是不可见的。
你提到这是在-awakeFromNib:
- 这个方法有可能运行两次吗?我曾经多次让我感到困惑,而且很容易发生这种情况。您在MainMenu.xib中创建一个窗口控制器作为IB对象,然后让所述窗口控制器通过-[super initWithWindowNibName:]
在其自己的-init:
中加载NIB。这为每个涉及的NIB调用-awakeFromNib
一次。我在我的案例中创建了一些初始化问题的顺序,它显示了与你描述的类似的不确定行为。
我将代码移到了-windowWillLoad
和-windowDidLoad
方法,这是每个窗口,因此没有这个问题。