2012-06-02 33 views
1

我以前從未見過此響應,在同一應用程序的不同運行中,同一動作會引發不同的錯誤。按鈕單擊在後續啓動時給出不同的錯誤

我有一個按鈕(只是記錄發件人)在一個NSViewController子類,單擊按鈕(這是一個OSX應用程序)時引發錯誤的IBAction。我得到這些(到目前爲止):

-[NSArrayM buttonClick:]: unrecognized selector sent to instance 
-[__NSCFDictionary buttonClick:]: unrecognized selector sent to instance 
-[__NSCFSet buttonClick:]: unrecognized selector sent to instance 
-[NSRunLoop buttonClick:]: unrecognized selector sent to instance 

而且,可怕的EXC_BAD_ACCESS。

在本試驗中應用的唯一代碼是這樣在應用程序的委託來實例化視圖控制器:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    TestController *controller = [[TestController alloc] initWithNibName:@"TestController" bundle:nil]; 
    [self.window.contentView addSubview:controller.view]; 
} 

這IBAction爲在視圖控制器亞類:

-(IBAction)buttonClick:(id)sender { 
    NSLog(@"%@",sender); 
} 

的IBAction爲這是在視圖控制器中實現的連接在IB(通過文件的所有者)到它在其視圖中的按鈕。

我不明白我如何能在這樣一個簡單的程序中得到這麼多不同的錯誤消息。這可能是視圖控制器不在響應鏈中的問題嗎?如果是這樣,爲什麼它應該拋出錯誤,不應該把這條消息傳遞給鏈條然後丟棄?

我試着讓控制器的視圖設置控制器作爲下一個響應者([controller.view setNextResponder:controller];),但這只是在啓動時給我EXC_BAD_ACCESS錯誤。

回答

0

好吧,我用Shane Stanley的一個指針在MacScripter上修正了這個問題(我在ApplescriptObjC中創建了另一個版本來問那個問題,但那個版本工作正常)。這是一個內存管理的問題 - 使用ARC時很容易忘記這一點。在我發送IBAction之前,TestController實例正在被釋放。這解釋了變量錯誤消息,因爲向釋放對象發送消息可以指向任何東西。通過爲TestController實例控制器聲明一個屬性(如保留)來解決問題。

相關問題