メインコントローラに次のコードをロードしています。 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彼はControllerがUITabControllerから直接ロードされることを見ます。閉鎖中にself
を維持するためにgetActiveSubscriptionCompletionBlock
を取得するにはどうすればよいですか?
あなたはコードの完全なコンテキストを表示していませんが、 'let sponsorViewController ...'がある関数の中にあると仮定します。その関数が終了すると、 'let'変数は範囲外になります。クロージャーは「弱い自己」を使用しているので、それはビューコントローラーを保持するのに十分ではないため、解放されます。あなたのタブコントローラによってロードされるView Controllerのインスタンスは、別のインスタンスです。 – Paulw11
残念ながら、ClosureはServerOperationのcallbackQueue.addOperationWithBlockのコールバックを実装しているため、私には弱い、または所有されていないユーザーのみを使用できます。 –
弱い問題はありません。あなたがデータを読み込もうとしているのは問題です。あなたは 'viewDidLoad'でデータをロードして、標準のプロセスにView Controllerをインスタンス化させるだけです。 – Paulw11