2012-02-29 72 views
3

我有一個應用程序駐留在Mac的菜單欄中,菜單條目用於控制應用程序。應用運行一段時間後,如果沒有交互,所有菜單項都將被禁用。 「修復」菜單的唯一方法是再次啓動應用程序(當它已經運行並且不退出應用程序時),並且菜單項將再次啓用。菜單欄菜單項在一段時間後失效

是我的問題的原因,因爲我已經宣佈IBOutlet這個菜單很弱,它應該很強?或者還有其他原因可能發生?

回答

1

我是一個類似的應用程序的作者,它坐落在菜單欄中,我已經能夠保持它長時間運行而沒有看到你描述的問題。雖然我不知道究竟是什麼導致了你的問題,但我可以說我對我的NSMenu使用了一個強大的IBOutlet參考,這似乎工作得很好。

+0

我的想法是使用強大的從別人,我現在正在測試它......但是,如果它正常工作,我會授予代表。謝謝。此外,看起來像一個好的應用程序。我是5by5播客粉絲。 – Dustin 2012-03-06 20:14:57

+0

這正是我正在尋找的答案,謝謝 – Dustin 2012-03-12 16:03:04

1

NSMenuS會自動驗證NSMenuItems。如果任何項目目標爲零,或者任何目標不響應預期的消息,則會自動禁用。要覆蓋此行爲,請在您的NSMenu子類中實現validateMenuItem:。但是,請注意,通常當NSMenuItems被禁用時,這通常意味着消息的目標已經被釋放,或者不再可用。

+0

+1。當我最初聽到這個問題時,這就是我想的。 – 2012-03-08 21:13:29

1

如果您在Mac OS X上使用ARC,則必須使用strong參考,當您創建出口到尖端中的頂級對象時。如果你不這樣做,對象將被釋放。

在iOS上,事情有所不同,因爲UIViewController的工作方式,您應該使用weak參考。