簡體   English   中英

viewDidLoad中的代碼每次調用時都會運行

[英]Code in viewDidLoad runs every time it is called

大家好我正在Udemy做一個課程,代碼要求在viewDidLoad函數中放置代碼,如下所示:

    override func viewDidLoad() {
    super.viewDidLoad()

    placesArray.append(["name":"Taj Mahal", "lat":"27.175607", "lon":"78.042112"])

}

數組追加應該只運行一次,但是,當我轉到另一個viewController並返回時,它運行代碼再次追加。 所以我現在有一個有2行的數組,這兩行都是Taj Mahal。

我以為viewDidLoad函數只運行一次代碼?

有沒有解決的辦法?

謝謝。

附錄:我使用的是Swift,所以在創建和啟動viewController時我沒有看到任何alloc和init。 聽起來很奇怪,視頻教程讓它在viewDidLoad中工作,教練正在使用故事板從初始表視圖控制器轉到視圖控制器上的地圖視圖,並且在地圖視圖上只有一個后退按鈕通過故事板返回到表視圖控制器。 - 可能是因為我有最新版本的Swift語言而且教練使用的是早期版本,(因為我注意到之前編碼方面略有不同),但你永遠都不知道。 無論何時,只要他觸摸后退按鈕,它就不再運行附加代碼。 我試圖與培訓師聯系,作為這里的一些建議,雖然它們很好似乎不起作用。 一旦我與培訓師聯系,我會把解決方案放在這里。

視圖控制器的view完成加載時,將調用viewDidLoad方法。 當視圖控制器的view屬性為nil且某些內容嘗試訪問它時, view將加載。

UIViewController *myVC = [[UIViewController alloc] init];
UIView *aView = myVC.view; // this loads myVC's view; viewDidLoad is called when it completes loading.

如果view已卸載(通常由於內存限制),則在下次訪問view屬性時將調用該view

通常不應在視圖方法內完成數據集的操作。 考慮將其移動到視圖控制器的init (或不同的“數據源”類)。

只要設置了視圖控制器的視圖屬性,就會調用viewDidLoad 這是什么時候發生的? 這取決於視圖控制器的包含方式:

UINavigationController - 視圖控制器視圖在添加到導航堆棧時加載,並在刪除時“卸載”(盡管不推薦使用viewDidUnload方法)。

UITabBarController - 視圖控制器視圖在添加到選項卡欄時加載,無論它們是否在屏幕上。 當您從標簽更改為標簽時,它們會保持加載狀態。

根據您的需要和用例,您可以創建自己的視圖控制器容器,以滿足您的需要。 查看Apple文檔以正確的方式執行此操作: https//developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

我想你正在嘗試在viewDidLoad中進行數據初始化。 如果在viewDidLoad之前沒有對placesArray進行其他操作,那么可以直接設置placesArray而不是追加:

placesArray = ["name":"Taj Mahal", "lat":"27.175607", "lon":"78.042112"]

然后,即使您的視圖由於某些原因被卸載。 泰姬陵仍將只增加一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM