2012-04-17 47 views
0

我有一個名爲MainMenu的類,它有一個名爲switchViews的方法,帶有2個參數,一個NSWindow和一個NSView。來自其他類的調用方法什麼都不做?

然後我有AppDelegate,我想在'applicationDidFinishLaunching'中使用此方法。

所以在AppDelegate.h我已經進口MainMenu.h,並在AppDelegate.m我使用方法如下:

MainMenu *theMainMenu = [[MainMenu alloc]] init]; 
[theMainMenu switchViews:param1:param2; 

沒有警告或錯誤,它只是不調用該方法。

如果我複製並粘貼方法而不是調用它,它工作正常,所以它不是一個變量的問題,它似乎只是運行該方法,如果它在不同的類中的錯誤?

任何幫助將不勝感激。

在此先感謝

switchViews方法:

- (void)switchViews:(NSWindow*)mainWindow:(NSView*)newView { 
    NSView *dummyView; 
    [theMainWindow setContentView:dummyView]; 
    [theMainWindow setContentSize:newView.frame.size]; 
    [theMainWindow setContentView:newView]; 
} 

編輯:對不起你們,這只是一個錯字。

解決方法:我在方法調用中使用了錯誤的參數。下面是工作代碼:

- (void)switchViews:(NSWindow*)mainWindow:(NSView*)newView { 
    NSView *dummyView; 
    [mainWindow setContentView:dummyView]; 
    [mainWindow setContentSize:newView.frame.size]; 
    [mainWindow setContentView:newView]; 
} 
+0

你可以顯示switchViews方法聲明嗎? – 2012-04-17 16:30:21

+0

@J_D編輯後顯示方法:) – Cristian 2012-04-17 16:32:34

+0

您確定此代碼編譯?我希望你的方法被聲明爲: - (void)switchViews:(NSWindow *)mainWindow andView:(NSView *)newView {...} – 2012-04-17 16:35:23

回答

1
MainMenu *theMainMenu = [MainMenu alloc[ init]]; 

如果這是你的代碼,那麼它甚至沒有運行,因爲構建失敗,因爲該代碼是無效的。

假設您的實際代碼不包含語法錯誤,沒有任何事情發生通常意味着您發送消息到nil。或者-[MainMenu init]返回nil,或者switchViews::的實現嘗試向其沒有的對象發送消息。

假設您在-[MainMenu init]中沒有任何語句返回nil,則後一種情況更可能發生。確保它創建了它需要的任何對象,或者,如果你的意思是它是基於筆尖的,確保你已經連接了所有MainMenu對象的插座,並且你沒有忘記加載筆尖。

編輯:

- (void)switchViews:(NSWindow*)mainWindow:(NSView*)newView { 
    NSView *dummyView; 
    [theMainWindow setContentView:dummyView]; 
    [theMainWindow setContentSize:newView.frame.size]; 
    [theMainWindow setContentView:newView]; 
} 

您命名方法的第一個參數變量mainWindow,但隨後你將消息發送到theMainWindow

如果MainMenu對象有一個名爲theMainWindow的插座,請確保掛鉤並刪除多餘的第一個參數。或者,關閉插座(或其他theMainWindow)並使用mainWindow。另外,由於AppDelegate(出於某種原因)正在將窗口傳遞給MainMenu對象,因此請確保AppDelegate實際上具有該窗口。首先檢查AppDelegate代碼中的「param1」的值。

+0

你做到了,我迷惑了自己的mainWindow和theMainWindow變量。我將變量更改爲正確的變量,並立即開始工作。非常感謝您發現這個錯誤。第二次你幫了我! – Cristian 2012-04-17 16:43:42

+0

請注意,這仍然是一個糟糕的設計;該方法不依賴於MainMenu實例的狀態,並且實例化所述類的一個實例只是爲了執行一個單獨的操作,實際上沒有多大意義。通常情況下,會有一個單獨的MainMenu在你的應用程序中浮動。 – bbum 2012-04-17 16:49:30

0

該代碼不會編譯(或者,如果是這樣,它根本就沒有做你想做的)。

這是沒有語法意義:

MainMenu *theMainMenu = [MainMenu alloc[ init]]; 

在一般情況下,雖然,你可能不希望被分配&初始化的東西是最有可能已經實例化,並在一個新實例屏幕

在各行之間進行閱讀,我懷疑你會從刷新面向對象編程的基礎和Cocoa設計模式中受益。

+0

這是一個錯字..現在糾正 – Cristian 2012-04-17 16:34:39

相關問題