diff --git a/Passepartout-iOS/AppDelegate.swift b/Passepartout-iOS/AppDelegate.swift index a7723c9d..9ded42e9 100644 --- a/Passepartout-iOS/AppDelegate.swift +++ b/Passepartout-iOS/AppDelegate.swift @@ -126,14 +126,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele wizard.parsedFile = parsedFile wizard.removesConfigurationOnCancel = true - // best effort to delegate to main vc - let split = root as? UISplitViewController - let master = split?.viewControllers.first as? UINavigationController - master?.viewControllers.forEach { - if let organizerVC = $0 as? OrganizerViewController { - wizard.delegate = organizerVC - } - } nav.modalPresentationStyle = .formSheet root.present(nav, animated: true, completion: nil) } diff --git a/Passepartout-iOS/Scenes/Organizer/ImportedHostsViewController.swift b/Passepartout-iOS/Scenes/Organizer/ImportedHostsViewController.swift index 1f9b2db5..2188141b 100644 --- a/Passepartout-iOS/Scenes/Organizer/ImportedHostsViewController.swift +++ b/Passepartout-iOS/Scenes/Organizer/ImportedHostsViewController.swift @@ -34,8 +34,6 @@ class ImportedHostsViewController: UITableViewController { private var parsedFile: ParsedFile? - weak var wizardDelegate: WizardDelegate? - override func viewDidLoad() { super.viewDidLoad() @@ -104,7 +102,6 @@ class ImportedHostsViewController: UITableViewController { return } wizard.parsedFile = parsedFile - wizard.delegate = wizardDelegate // retain back button wizard.navigationItem.leftBarButtonItem = nil diff --git a/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift b/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift index e0cd4f12..2dcfcd11 100644 --- a/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift +++ b/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift @@ -69,6 +69,10 @@ class OrganizerViewController: UITableViewController, TableModelHost { } // MARK: UIViewController + + deinit { + NotificationCenter.default.removeObserver(self) + } override func awakeFromNib() { super.awakeFromNib() @@ -90,6 +94,8 @@ class OrganizerViewController: UITableViewController, TableModelHost { } service.delegate = self + + NotificationCenter.default.addObserver(self, selector: #selector(wizardDidCreate(notification:)), name: .WizardDidCreate, object: nil) } override func viewDidAppear(_ animated: Bool) { @@ -134,13 +140,8 @@ class OrganizerViewController: UITableViewController, TableModelHost { assert(selectedProfile != nil, "No selected profile") vc.profile = selectedProfile - } else if let vc = destination as? Wizard { - if let providerVC = vc as? WizardProviderViewController { - providerVC.availableNames = availableProviderNames ?? [] - } - vc.delegate = self - } else if let vc = destination as? ImportedHostsViewController { - vc.wizardDelegate = self + } else if let providerVC = destination as? WizardProviderViewController { + providerVC.availableNames = availableProviderNames ?? [] } } @@ -436,8 +437,14 @@ extension OrganizerViewController: ConnectionServiceDelegate { } } -extension OrganizerViewController: WizardDelegate { - func wizard(didCreate profile: ConnectionProfile, withCredentials credentials: Credentials) { +extension OrganizerViewController { + @objc private func wizardDidCreate(notification: Notification) { + guard let profile = notification.userInfo?[WizardCreationKey.profile] as? ConnectionProfile, + let credentials = notification.userInfo?[WizardCreationKey.credentials] as? Credentials else { + + fatalError("WizardDidCreate notification must post profile and credentials") + } + service.addOrReplaceProfile(profile, credentials: credentials) TransientStore.shared.serialize() // add diff --git a/Passepartout-iOS/Scenes/Organizer/WizardHostViewController.swift b/Passepartout-iOS/Scenes/Organizer/WizardHostViewController.swift index f6919c0f..e08da738 100644 --- a/Passepartout-iOS/Scenes/Organizer/WizardHostViewController.swift +++ b/Passepartout-iOS/Scenes/Organizer/WizardHostViewController.swift @@ -29,7 +29,7 @@ import SwiftyBeaver private let log = SwiftyBeaver.self -class WizardHostViewController: UITableViewController, TableModelHost, Wizard { +class WizardHostViewController: UITableViewController, TableModelHost { @IBOutlet private weak var itemNext: UIBarButtonItem! private let existingHosts: [String] = { @@ -46,8 +46,6 @@ class WizardHostViewController: UITableViewController, TableModelHost, Wizard { private var createdProfile: HostConnectionProfile? - weak var delegate: WizardDelegate? - // MARK: TableModelHost lazy var model: TableModel = { @@ -150,7 +148,10 @@ class WizardHostViewController: UITableViewController, TableModelHost, Wizard { } dismiss(animated: true) { - self.delegate?.wizard(didCreate: profile, withCredentials: credentials) + NotificationCenter.default.post(name: .WizardDidCreate, object: nil, userInfo: [ + WizardCreationKey.profile: profile, + WizardCreationKey.credentials: credentials + ]) } } diff --git a/Passepartout-iOS/Scenes/Organizer/WizardProviderViewController.swift b/Passepartout-iOS/Scenes/Organizer/WizardProviderViewController.swift index 05e5c4d3..715eada3 100644 --- a/Passepartout-iOS/Scenes/Organizer/WizardProviderViewController.swift +++ b/Passepartout-iOS/Scenes/Organizer/WizardProviderViewController.swift @@ -25,13 +25,11 @@ import UIKit -class WizardProviderViewController: UITableViewController, Wizard { +class WizardProviderViewController: UITableViewController { var availableNames: [Infrastructure.Name] = [] private var createdProfile: ProviderConnectionProfile? - weak var delegate: WizardDelegate? - override func viewDidLoad() { super.viewDidLoad() @@ -55,7 +53,10 @@ class WizardProviderViewController: UITableViewController, Wizard { fatalError("No profile created?") } dismiss(animated: true) { - self.delegate?.wizard(didCreate: profile, withCredentials: credentials) + NotificationCenter.default.post(name: .WizardDidCreate, object: nil, userInfo: [ + WizardCreationKey.profile: profile, + WizardCreationKey.credentials: credentials + ]) } } diff --git a/Passepartout/Sources/Model/Wizard.swift b/Passepartout/Sources/Model/Wizard.swift index 6f04923b..cad6dceb 100644 --- a/Passepartout/Sources/Model/Wizard.swift +++ b/Passepartout/Sources/Model/Wizard.swift @@ -25,10 +25,12 @@ import Foundation -protocol Wizard: class { - var delegate: WizardDelegate? { get set } +extension Notification.Name { + static let WizardDidCreate = Notification.Name("WizardDidCreate") } -protocol WizardDelegate: class { - func wizard(didCreate profile: ConnectionProfile, withCredentials credentials: Credentials) +enum WizardCreationKey: String { + case profile + + case credentials }