2016-02-24 17 views
10
私はこのようなSFSafariViewControllerでいくつかのURLプリロードする this SO answerが提供する技術を使用しています

SFSafariViewControllerを子ビューコントローラとして正しく削除するにはどうすればいいですか?

addChildViewController(svc) 
svc.didMoveToParentViewController(self) 
view.addSubview(svc.view) 

をそして、私は次のコードでSafariのビューコントローラを削除しよう:

svc.willMoveToParentViewController(nil) 
svc.view.removeFromSuperview() 
svc.removeFromParentViewController() 

は、今私がプリロードすることができますURLを確認し、問題なくSafari Viewを表示します。しかし、アプリケーション(プリロード/表示/削除)を数回(おそらく30回以上)繰り返すと、アプリケーションがクラッシュしたときにログにMemory level is not normal or this app was killed by jetsamが表示されるため、メモリの問題によりクラッシュすることがあります。クラッシュする前に

、私は、可能なリーク警告に関するいくつかのログを見ました:Safariのビューコントローラを取り外すとき

<Warning>: notify name "UIKeyboardSpringBoardKeyboardShow" has been registered 20 times - this may be a leak 

<Warning>: notify name "com.apple.SafariViewService-com.apple.uikit.viewService.connectionRequest" has been registered 20 times - this may be a leak 

私はそれを正しくやっていますか?何か不足していますか?またはこの問題を回避するための提案はありますか?

答えて

1

上記のように子ビューコントローラのコードを追加すると、ドキュメントごとにその順序が少し異なるはずです。

addChildViewController(svc) 
view.addSubview(svc.view) 
svc.didMoveToParentViewController(self) 

あなたは最初の子ビューを追加し、didMoveToParentViewControllerを呼び出す必要があります。これを試して、それが動作するかどうか確認してください。

容器

  • (ボイド)displayContentControllerに子ビュー・コントローラを5-1Addingリスト:(のUIViewController *)内容{[自己addChildViewController:コンテンツ]。 content.view.frame = [self frameForContentController]; [self.view addSubview:self.currentClientView]; [コンテンツ didMoveToParentViewController:self]; }

上記の例では、子の didMoveToParentViewController:メソッドのみを呼び出すことに注意してください。これは、 addChildViewController:メソッドが子の willMoveToParentViewController:メソッドを呼び出すためです。 がdidMoveToParentViewController:メソッドを呼び出す必要がある理由は、 子ビューの をコンテナのビュー階層に埋め込むまで呼び出すことができないためです。

+0

を、それを解決するゾンビを有効にしてみたりリーク機器を使用しない場合は、注文が提案してみましたが、それでも同じ問題が残っています。 –

+0

WKWebkitViewを使用してSVCを使用する代わりにメインVCにサブビューとして追加できますか? –

+1

いいえ、WKWebkitViewを使用することは別のものです –

1

おそらくsvcをリークしています。それを取り除いた後でそれを無くしてください。

svc.willMoveToParentViewController(nil) 
svc.view.removeFromSuperview() 
svc.removeFromParentViewController() 
svc = nil 

これは

関連する問題