我在主控制器中加載以下代碼。我已調試,以確保它沒有問題調用WebPortalViewController。instantiateViewControllerWithIdentifier不維護關閉中的實例
父控制器A.viewDidLoad()
let sponsorViewController:UIViewController = storyboard!.instantiateViewControllerWithIdentifier("Child")
childViewController.view.setNeedsLayout()
childViewController.view.layoutIfNeeded()
問題是然而,該viewDidLoad中功能依賴於操作呼叫
兒童控制器B.viewDidload()
的執行let operation = GetActiveSubscriptionOperation()
operation.getActiveSubscriptionCompletionBlock = { [weak self] (subscription, error) in
switch (self, subscription, error) {
self
總是爲空,直到t他認爲控制器直接從UITabController加載。我如何獲得getActiveSubscriptionCompletionBlock
在關閉中維護self
?
你沒有顯示你的代碼的完整上下文,但我認爲'let sponsorViewController ...'是在某個函數內。只要該函數退出,'let'變量超出範圍。由於閉包使用'弱自我',這不足以保持視圖控制器,所以它被釋放。由您的選項卡控制器加載的視圖控制器的實例是一個不同的實例。 – Paulw11
不幸的是,關閉只允許我使用弱或無主,因爲它實現了ServerOperation的回調callbackQueue.addOperationWithBlock –
弱是不是問題。噢,你正試圖加載數據是問題。您應該將數據加載到'viewDidLoad'中,並讓標準進程負責爲您實例化視圖控制器。 – Paulw11