Bläddra i källkod

delete backup provider only when the view is actually destroyed, not if it removed temporary from screen

B. Petersen 2 år sedan
förälder
incheckning
b9140cb740

+ 9 - 2
DcCore/DcCore/DC/Wrapper.swift

@@ -1419,14 +1419,21 @@ public class DcLot {
 }
 
 public class DcBackupProvider {
-    private var dcBackupProviderPointer: OpaquePointer
+    private var dcBackupProviderPointer: OpaquePointer?
 
     public init(_ dcContext: DcContext) {
         dcBackupProviderPointer = dc_backup_provider_new(dcContext.contextPointer)
     }
 
     deinit {
-        dc_backup_provider_unref(dcBackupProviderPointer)
+        unref()
+    }
+
+    public func unref() {
+        if dcBackupProviderPointer != nil {
+            dc_backup_provider_unref(dcBackupProviderPointer)
+            dcBackupProviderPointer = nil
+        }
     }
 
     public func getQr() -> String? {

+ 9 - 6
deltachat-ios/Controller/BackupTransferViewController.swift

@@ -71,13 +71,16 @@ class BackupTransferViewController: UIViewController {
         }
     }
 
-    override func viewDidDisappear(_ animated: Bool) {
-        // TODO: this is too harsh, aborting should be done only when the user actively quits the viewController
-        if dcBackupProvider != nil {
-            dcContext.stopOngoingProcess()
-            dcBackupProvider = nil
+    override func didMove(toParent parent: UIViewController?) {
+        let isRemoved = parent == nil
+        if isRemoved {
+            if dcBackupProvider != nil {
+                dcContext.stopOngoingProcess()
+                dcBackupProvider?.unref()
+                dcBackupProvider = nil
+            }
+            dcAccounts.startIo()
         }
-        dcAccounts.startIo()
     }
 
     // MARK: - setup