8

我正在使用 UIVideoEditorController,但成功委托方法为我调用了两次。但是,所有传递对象的所有指针都告诉它发送完全相同的数据。

let editor = UIVideoEditorController()
editor.videoMaximumDuration = 10.0
editor.videoQuality = .typeIFrame1280x720
editor.delegate = self
editor.videoPath = // some path goes here
self.present(editor, animated: true, completion: nil)

然后下面的方法打印“这里”2次。

func videoEditorController(_ editor: UIVideoEditorController, didSaveEditedVideoToPath editedVideoPath: String) {
    print("here")
    self.dismiss(animated: true, completion: nil)
}
4

4 回答 4

5
func videoEditorController(_ editor: UIVideoEditorController, didSaveEditedVideoToPath editedVideoPath: String) {
    editor.delegate = nil
    editor.dismiss(animated: true)
}
于 2019-11-28T17:47:12.920 回答
1

是的,我知道,这种方法很糟糕,但是可以工作:)

var isSaved:Bool = false

func videoEditorController(_ editor: UIVideoEditorController, didSaveEditedVideoToPath editedVideoPath: String) {
   if(!isSaved) {
      print("here")
      self.isSaved = true
   }
       self.dismiss(animated: true, completion: nil)
   }
于 2018-08-07T10:51:06.857 回答
0

您能否调试一下当用户离开屏幕时使用 UIVideoEditorController 的 UIViewController 是否正确重新分配。就像离开屏幕或从屏幕返回后一样。

可能是您的 UIViewController 在内存中的一个对象,这就是您的方法调用两次的原因。

调试这个

  • 为你创建deinit{ print("deallocating") }UIViewController。
  • 在打印上添加断点。
  • 然后确保 deinit 被调用。

希望它会帮助你。:)

于 2018-08-07T11:02:44.050 回答
0

这对我有用

- (void)videoEditorController:(UIVideoEditorController *)editor didSaveEditedVideoToPath:(NSString *)editedVideoPath {

    [editor dismissViewControllerAnimated:YES completion:^{
        NSLog(@"path = %@", editedVideoPath);
    }];    
}
于 2019-06-19T07:55:03.927 回答