所以我在這裏有點困惑。我有一個Cocoa應用程序,在appdelegate頭文件中,我聲明瞭一個在Interfacebuilder中連接的NSDrawer,並根據上下文以編程方式設置其contentView。內容視圖包含連接到Appdelegate中各種功能的按鈕。在NSApp委託上引用變量Cocoa
@property (strong) IBOutlet NSDrawer *theDrawer;
當我的應用程序啓動應用程序,我檢查它在調試器「theDrawer」不是零和的InterfaceBuilder中正確實例。在
現在,如果用戶單擊任何按鈕,事實證明對[[NSApp委託] theDrawer]的引用將被忽略,因爲該Drawer是零。這對我沒有意義。我嘗試通過在應用啓動時專門設置委託來解決此問題。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp setDelegate:self];
}
我檢查過self.theDrawer不是零。但即使在我明確設置委託後,以後對[[NSApp委託] theDrawer]的任何調用都是零。
如何確保訪問我的應用程序委託上的變量?我的理解是,調用NSapp委託將返回一個獨特的應用程序實例。
看來,當用戶點擊一個按鈕,這將創建一個新的線程和NSApp委託將返回所有變量爲零。
任何幫助表示讚賞
你不應該使用這個應用程序委託(這不是什麼類是在那裏)。添加一個帶有抽屜屬性斷點的setter,何時被調用? – Wain
我應該在哪裏放置一個變量,我需要從應用程序的任何地方訪問?在主線程開始之後,setter被直接調用 –
如果它是一個視圖類型對象,則在加載NIB的相關窗口或窗口控制器中聲明出口。 NSApplication和委託存在橋接應用程序和系統事件,而不是全局狀態桶。 – CodaFi