2

カメラロールから画像を削除できるセカンダリビューコントローラーがあります。問題は、completionHandler が想定どおりに起動することですが、popViewController は実際には約 8 秒間実行されていないようです。オプションの出力を見ることができるので、間違いなく起動します。そして、ポップを実行するだけで確認したところ、正しく実行されました。viewWillDisapear イベントを確認したところ、同様に遅く発生しました。これは、ナビゲーション コントローラーがビューの現在の viewController をまだポップしていないことを考慮して予想していました。

PHPhotoLibrary.sharedPhotoLibrary().performChanges({

    PHAssetChangeRequest.deleteAssets(assetsToDelete)
        return
    }, completionHandler: { success, error in
       if success {
           println("success")
           println(navigationController.popViewControllerAnimated(true))
           println("so slow")
       }
       if let error = error {
           println(error)
       }
       return
})
4

2 に答える 2

6

ドキュメントには次のように書かれています。

Photos は、変更ブロックと完了ハンドラ ブロックの両方を任意のシリアル キューで実行します。変更の結果としてアプリの UI を更新するには、その作業をメイン キューにディスパッチします。

ナビゲーション コントローラーはメイン スレッドから実行する必要があるため、次のような呼び出しをラップする必要があります。

dispatch_async(dispatch_get_main_queue()) { 
    navigationController.popViewControllerAnimated(true)
} 
于 2015-08-05T03:11:46.903 に答える