2012-05-12 168 views
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(代碼= 1,地址= 0x10)」。它打破了最終的'... setAttributes ...'一行。有一次,我嘗試使用方法--initWithString:attributes:來初始化attribTitle,並確定崩潰(當它的時候)在alloc-init行上。

我已經嘗試清除Xcode重新啓動,但它仍然發生在每個其他構建...如果應用程序不崩潰然後attrbibuted字符串出現預期。

我想知道如果我有一個損壞的項目文件,但萬一我做了一些傻事,任何人都可以指出一個錯誤 - 大概是'屬性'NSDictionary?

謝謝!

託德。

+0

如果你像這樣初始化段落風格會發生什麼:'NSMutableParagraphStyle *居中= [[NSParagraphStyle defaultParagraphStyle] mutableCopy];'? – Wienke

+0

另一個問題可能是您命名字體的方式。試着打破這個代碼並測試你的字體是否爲零。 – Wienke

+0

對於它的價值,我在一個工作項目中嘗試了你的代碼,到目前爲止在OS X SDK 10.7上沒有崩潰。按照Wienke的建議,我嘗試記錄字體,結果如下:'「Helvetica-Bold 12.00 pt。P [](0x7ff6734f3f40)fobj = 0x7ff6736d0190,spc = 3.33」' - 那裏也沒有問題。 – modocache

回答

1

這是您運行的代碼,它是簡化的嗎?事實上,它看起來對我很好(我敢說)。當它每隔一段時間崩潰時,比這更表示其他情況,這在代碼中是不可見的。

你提到這是-awakeFromNib: - 這種方法可能運行兩次嗎?我曾多次讓我困惑,而且這種情況很容易發生,例如,您在MainMenu.xib中創建一個窗口控制器作爲IB對象,然後讓窗口控制器通過-[super initWithWindowNibName:]在其自己的-init:中加載一個NIB。這爲每個涉及的NIB調用-awakeFromNib一次。在我的例子中,我已經創建了一些初始化問題的順序,它顯示了與您描述的類似的不確定行爲。

我將代碼移動到了-windowWillLoad-windowDidLoad方法,這是每個窗口,因此不存在此問題。

+0

非常感謝你,感謝你。這似乎是它!我真的很愚蠢地把一個NSObject實例錯誤地放在一個nib文件中。我已經跑了10次以上,現在看起來都很好!順便說一句:重新安裝Xcode似乎也解決了項目設置更新問題,所以也許你已經做了我所做的,也就是Xcode 4.2和4.3在同一臺機器上。我的機器上的Spotlight似乎將兩個版本混合在一起,所以有時我會運行4.2。 – Todd

+0

嘿,這真是太棒了! :)我會在這裏檢查Xcode版本。 – febeling

相關問題