]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
iOS: KeyValueCell should hold the observation token
authorRoopesh Chander <roop@roopc.net>
Sun, 3 Feb 2019 06:57:51 +0000 (12:27 +0530)
committerRoopesh Chander <roop@roopc.net>
Sun, 3 Feb 2019 07:10:19 +0000 (12:40 +0530)
And should nil the token when preparing for reuse.

Otherwise, the observation closure is still active even after the cell
gets reused.

Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/iOS/View/KeyValueCell.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift

index c77cab960640b3a23df4ff1179ca4c00ce633635..61b2f2d470b91dc0a365bfb90416bbe439878845 100644 (file)
@@ -71,6 +71,8 @@ class KeyValueCell: UITableViewCell {
     var onValueChanged: ((String) -> Void)?
     var onValueBeingEdited: ((String) -> Void)?
 
+    var observationToken: AnyObject?
+
     private var textFieldValueOnBeginEditing: String = ""
 
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
@@ -187,6 +189,7 @@ class KeyValueCell: UITableViewCell {
         keyboardType = .default
         onValueChanged = nil
         onValueBeingEdited = nil
+        observationToken = nil
         key = ""
         value = ""
         configureForContentSize()
index beb5d24e6c9c929109b50db8aff592e72a9861a5..3e80d944c12bd1bd5b421d0934eeaa9f21210d66 100644 (file)
@@ -33,7 +33,6 @@ class TunnelDetailTableViewController: UITableViewController {
     private var peerFieldIsVisible = [[Bool]]()
 
     private weak var statusCell: SwitchCell?
-    private var onDemandStatusObservationToken: AnyObject?
     private var statusObservationToken: AnyObject?
     private var reloadRuntimeConfigurationTimer: Timer?
 
@@ -352,7 +351,7 @@ extension TunnelDetailTableViewController {
         let cell: KeyValueCell = tableView.dequeueReusableCell(for: indexPath)
         cell.key = tr("tunnelOnDemandKey")
         cell.value = TunnelViewModel.activateOnDemandDetailText(for: tunnel.activateOnDemandSetting)
-        onDemandStatusObservationToken = tunnel.observe(\.isActivateOnDemandEnabled) { [weak cell] tunnel, _ in
+        cell.observationToken = tunnel.observe(\.isActivateOnDemandEnabled) { [weak cell] tunnel, _ in
             cell?.value = TunnelViewModel.activateOnDemandDetailText(for: tunnel.activateOnDemandSetting)
         }
         return cell