當我們必須使用這些方法時,你能解釋一下嗎?以及在什麼情況下我們應該使用哪種方法?現在我測試哪些作品和使用(是啊,我是一個初學者).. 謝謝。我正在開發MAC。何時使用awakeFromNib,initWithWindow,windowDidLoad方法?
回答
首先,你不應該自己調用awakeFromNib和windowDidLoad。你可以在你的自定義類中實現它們,然後Cocoa會在適當的時候調用它們。
awakeFromNib適用於從筆尖檔案加載的所有對象,而不僅僅是窗口和窗口控制器。這是一個很好的通用的地方做安裝 - 它是安全的(你保證對象完全加載,從初始化的調用返回,並設置了所有的插座),但仍然很早。
windowDidLoad(和windowWillLoad)適用於所有窗口,無論從nib存檔加載還是實時創建。但它不在窗口上調用,它在窗口的控制器上調用。 (通常你不會創建你自己的NSWindow子類,但是你創建了你自己的NSWindowController子類。)如果你已經設置了依賴於被加載的窗口的代碼,你應該把它放在這裏(但它實際上並不那麼重要的情況下,因爲一旦你嘗試訪問窗口屬性,它將被創建)。
initWithWindow:是你自己調用的東西,但一開始Cocoa程序員可能不想這樣做。
您應該閱讀一些Xcode附帶的指南。如果您想要基於文檔的應用程序,請從「基於文檔的應用程序編程指南for Mac」開始。如果你想要一個單窗口實用程序的應用程序,你仍然需要了解MVC等等,所以你可能首先需要構建一個基於文檔的應用程序來學習你的方法。另外,如果你想了解事件的順序,重寫每一條消息,然後添加類似NSLog(@「%s」,__FUNCTION__)的東西。和你的系統日誌將揭示一切。
在NIB取消存檔期間initWithWindow
在您的窗口從NIB取消存檔後立即被調用。這是您的窗口控制器被初始化的地方。一旦完整的取消歸檔過程完成 - 意味着您的窗口控制器和UIView元素已準備好 - 調用awakeFromNib
。在此之前,您沒有windowController或整個歸檔過程未完成。
當你做[label setStingValue]
在awakeFromNib
你的窗口控制器已準備好,而且你的視圖對象和關聯的上下文已準備就緒。
- 1. awakeFromNib()和windowDidLoad()
- 2. awakeFromNib方法調用多次
- 3. awakeFromNib在使用instantiateWithOwner時未調用:方法
- 4. 使用(void)awakeFromNib
- 5. 什麼時候使用viewDidLoad以及何時使用awakeFromNib
- 6. NSWindowController windowDidLoad不叫
- 7. awakeFromNib vs Outlets - 當我們調用awakeFromNib時設置插座和segues
- 8. 解釋awakeFromNib,initwithFrame使用
- 9. 調用awakeFromNib
- 10. UIKit:以編程方式調用awakeFromNib?
- 11. 子類awakeFromNib調用超類的自定義init/setup方法?
- 12. 如何喚醒awakefromnib
- 13. 何時使用「getResourceAsStream」方法?
- 14. 何時使用didMoveToWindow方法?
- 15. 何時使用session.replicate()方法
- 16. 從awakeFromNib調用Bundle.main.loadNibNamed時的Infinit循環
- 17. 可可:該方法我應該使用來初始化,而不是awakeFromNib
- 18. 爲什麼AwakeFromNib在使用故事板時會反覆調用?
- 19. 以編程方式創建ViewController和awakeFromNiB?
- 20. 我該如何回憶awakeFromNib
- 21. 在awakeFromNib中處理錯誤的正確方法是什麼?
- 22. 在其awakeFromNib方法中訪問UICollectionViewCell的UICollectionView
- 23. 如何在awakeFromNib後啓用windowWillResize
- 24. awakeFromNib對面?
- 25. init和awakeFromNib
- 26. awakeFromNib的好處?
- 27. viewDidLoad and awakeFromNib timing
- 28. 什麼是[super awakeFromNib];用於?
- 29. 調用超類的awakeFromNib
- 30. awakeFromNib調用倍數倍
我在我的工具欄中有一個標籤項,我想根據上一個窗口(從服務器獲取有關用戶狀態的一些值)打開窗口後設置值。我首先將[setStingValue] - 方法放在initWithWindow中,然後放在windowDidLoad中(該類是NSWindowController的子類) - 它不起作用,最後我把它放在awakeFromNib中,然後它就起作用了 - 請你解釋一下爲什麼會發生這種情況? –
正如我所說,如果你想知道發生了什麼,覆蓋你可以想到的每個消息(理想情況下在你的應用程序委託,窗口,視圖等,而不僅僅是你的窗口控制器),並添加一個NSLog消息,然後你會看到事件的順序,然後它應該對你更有意義。 – abarnert