2017-10-19 68 views
-1

im on OSX,XCode9,Objective C.以編程方式連接按鈕XCode9,Objective-C,OSX

我有一個viewController佈局在IB。該視圖包含連接到對應的viewController

SHTourViewController.h

@property (weak) IBOutlet SHStandardButton *closeButton; 
// SHStandardButton is a subclass from NSBUtton. 

的按鈕的視圖控制器得到由代碼在另一個類中instantinated(我需要原因我需要它從其他類instantinate此的viewController不止一次)。

// Get instance of viewController 
SHTourViewController* tourViewController = [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

現在,在我的viewController的viewDidLoad方法,我想連接的按鈕動作和目標:

SHTourViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.closeButton setAction:@selector(closeButtonClicked:)]; 
    [self.closeButton setTarget:self]; 
} 

- (void)closeButtonClicked:(id)sender { 
NSLog(@"CLOSE!"); 
} 
} 

當我按一下按鈕,應用程序崩潰(線程1:EXC_BAD_ACCESS)。我在這裏找不到我犯的錯誤。

任何幫助表示讚賞。

enter image description here

+0

請提供控制檯的實際完整的崩潰報告。 – matt

+0

我附上了一張圖片。爲什麼是-1? –

+0

如果您在Objective-C異常中設置斷點,則Xcode應停止在實際錯誤而不是NSApplicationMain。這會給你一行代碼和一個有用的堆棧跟蹤。 –

回答

0

您沒有提供關於你在做什麼的足夠信息。但是,就目前而言,事實表明,您正在獲取「無法訪問」的事實表明,一些重要對象在一陣煙霧中過早消失。我的猜測是,該對象是self,並且該問題與代碼後這一行:

SHTourViewController* tourViewController = 
    [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

你獲得這個視圖控制器的一個全新的實例,但是,你不能獲得其觀點,正確地進入視圖層次結構和視圖控制器本身到視圖控制器層次結構中,所以視圖控制器(我猜)被釋放。

但您沒有向我們展示相關的代碼,所以這只是一個猜測。

+0

謝謝!我不想「揮手」 - 我只是說...任何幫助表示讚賞 - >並感謝異常斷點和你的建議,我發現了錯誤。 viewController被取消分配,因爲它沒有強大的參考。一旦添加,它工作得很好。 –

+0

但這正是我所建議的。如果我的回答是對的,接受它會不會是正確的? – matt