From: Roopesh Chander Date: Sun, 3 Feb 2019 06:57:51 +0000 (+0530) Subject: iOS: KeyValueCell should hold the observation token X-Git-Tag: 0.0.20190207-1~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cbc602245e567c9635a60747b6eddf3713102829;p=thirdparty%2Fwireguard-apple.git iOS: KeyValueCell should hold the observation token 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 --- diff --git a/WireGuard/WireGuard/UI/iOS/View/KeyValueCell.swift b/WireGuard/WireGuard/UI/iOS/View/KeyValueCell.swift index c77cab9..61b2f2d 100644 --- a/WireGuard/WireGuard/UI/iOS/View/KeyValueCell.swift +++ b/WireGuard/WireGuard/UI/iOS/View/KeyValueCell.swift @@ -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() diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift index beb5d24..3e80d94 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift @@ -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