From b772b9603707cbbce29e84e10a7aae6184088dcd Mon Sep 17 00:00:00 2001 From: Chris Li Date: Wed, 31 Aug 2016 14:12:17 -0400 Subject: [PATCH] ControllerRetainer --- Kiwix-iOS/Controller/ControllerRetainer.swift | 35 +++++++++++++++++++ .../Library/LibrarySplitViewController.swift | 6 +++- .../Controller/Main/MainController.swift | 9 ++--- Kiwix-iOS/Info.plist | 2 +- Kiwix-iOSWidgets/Bookmarks/Info.plist | 2 +- Kiwix.xcodeproj/project.pbxproj | 4 +++ 6 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 Kiwix-iOS/Controller/ControllerRetainer.swift diff --git a/Kiwix-iOS/Controller/ControllerRetainer.swift b/Kiwix-iOS/Controller/ControllerRetainer.swift new file mode 100644 index 00000000..303fc07d --- /dev/null +++ b/Kiwix-iOS/Controller/ControllerRetainer.swift @@ -0,0 +1,35 @@ +// +// ControllerRetainer.swift +// Kiwix +// +// Created by Chris Li on 8/31/16. +// Copyright © 2016 Chris. All rights reserved. +// + +import UIKit + +class ControllerRetainer { + static let shared = ControllerRetainer() + private init() {} + + private var libraryStore: UIViewController? + private func releaseLibrary() {libraryStore = nil} + + var library: UIViewController { + let controller = libraryStore ?? UIStoryboard.library.instantiateInitialViewController() + libraryStore = controller + return controller! + } + + func didDismissLibrary() { + if #available(iOS 10, *) { + NSTimer.scheduledTimerWithTimeInterval(120.0, repeats: false, block: { (timer) in + print("set nil") + self.libraryStore = nil + }) + } else { + NSTimer.scheduledTimerWithTimeInterval(120.0, target: self, selector: Selector("releaseLibrary"), userInfo: nil, repeats: false) + } + } + +} diff --git a/Kiwix-iOS/Controller/Library/LibrarySplitViewController.swift b/Kiwix-iOS/Controller/Library/LibrarySplitViewController.swift index a3f8f601..6f63cfb6 100644 --- a/Kiwix-iOS/Controller/Library/LibrarySplitViewController.swift +++ b/Kiwix-iOS/Controller/Library/LibrarySplitViewController.swift @@ -26,9 +26,13 @@ class LibrarySplitViewController: UISplitViewController, UISplitViewControllerDe } func dismiss() { - dismissViewControllerAnimated(true, completion: nil) + dismissViewControllerAnimated(true) { + ControllerRetainer.shared.didDismissLibrary() + } } + // MARK: - UISplitViewControllerDelegate + func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { guard !isShowingLangFilter else {return false} return true diff --git a/Kiwix-iOS/Controller/Main/MainController.swift b/Kiwix-iOS/Controller/Main/MainController.swift index 0da5dc4f..94ce8ba7 100644 --- a/Kiwix-iOS/Controller/Main/MainController.swift +++ b/Kiwix-iOS/Controller/Main/MainController.swift @@ -22,7 +22,6 @@ class MainController: UIViewController { var tableOfContentsController: TableOfContentsController? var bookmarkController: BookmarkController? var bookmarkNav: UIViewController? - var libraryController: UIViewController? var settingController: UIViewController? var searchController: SearchController? var welcomeController: UIViewController? @@ -86,7 +85,6 @@ class MainController: UIViewController { tableOfContentsController = nil bookmarkController = nil bookmarkNav = nil - libraryController = nil settingController = nil searchController = nil welcomeController = nil @@ -240,10 +238,9 @@ class MainController: UIViewController { } func showLibraryButtonTapped() { - guard let viewController = libraryController ?? UIStoryboard.library.instantiateInitialViewController() else {return} - viewController.modalPresentationStyle = .FullScreen - libraryController = viewController - presentViewController(viewController, animated: true, completion: nil) + let controller = ControllerRetainer.shared.library + controller.modalPresentationStyle = .FullScreen + presentViewController(controller, animated: true, completion: nil) } func showSettingButtonTapped() { diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 76d240d9..1d311050 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -49,7 +49,7 @@ CFBundleVersion - 1.7.1643 + 1.7.1666 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist index 4217941a..5957841a 100644 --- a/Kiwix-iOSWidgets/Bookmarks/Info.plist +++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 1.7.2083 + 1.7.2122 NSExtension NSExtensionMainStoryboard diff --git a/Kiwix.xcodeproj/project.pbxproj b/Kiwix.xcodeproj/project.pbxproj index f4fe746b..2c0e5c50 100644 --- a/Kiwix.xcodeproj/project.pbxproj +++ b/Kiwix.xcodeproj/project.pbxproj @@ -85,6 +85,7 @@ 979CB60F1D04AD04005E1BA1 /* PreferenceTabController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979CB60E1D04AD04005E1BA1 /* PreferenceTabController.swift */; }; 979CB6C81D05CF37005E1BA1 /* SearchResultController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979CB6C71D05CF37005E1BA1 /* SearchResultController.swift */; }; 979CB6CA1D05D26E005E1BA1 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979CB6C91D05D26E005E1BA1 /* WebViewController.swift */; }; + 97A127C41D774C9900FB204D /* ControllerRetainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A127C31D774C9900FB204D /* ControllerRetainer.swift */; }; 97A1FD161D6F71CE00A80EE2 /* DirectoryMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A1FD121D6F71CE00A80EE2 /* DirectoryMonitor.swift */; }; 97A1FD171D6F71CE00A80EE2 /* ExtensionAndTypealias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A1FD131D6F71CE00A80EE2 /* ExtensionAndTypealias.swift */; }; 97A1FD181D6F71CE00A80EE2 /* SearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A1FD141D6F71CE00A80EE2 /* SearchResult.swift */; }; @@ -297,6 +298,7 @@ 979CB60E1D04AD04005E1BA1 /* PreferenceTabController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PreferenceTabController.swift; path = Controllers/PreferenceTabController.swift; sourceTree = ""; }; 979CB6C71D05CF37005E1BA1 /* SearchResultController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchResultController.swift; path = Controllers/SearchResultController.swift; sourceTree = ""; }; 979CB6C91D05D26E005E1BA1 /* WebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WebViewController.swift; path = Controllers/WebViewController.swift; sourceTree = ""; }; + 97A127C31D774C9900FB204D /* ControllerRetainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControllerRetainer.swift; sourceTree = ""; }; 97A1FD121D6F71CE00A80EE2 /* DirectoryMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DirectoryMonitor.swift; sourceTree = ""; }; 97A1FD131D6F71CE00A80EE2 /* ExtensionAndTypealias.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionAndTypealias.swift; sourceTree = ""; }; 97A1FD141D6F71CE00A80EE2 /* SearchResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchResult.swift; sourceTree = ""; }; @@ -817,6 +819,7 @@ 9771DC4B1C37278E009ECFF0 /* Setting */, 97D55EF51D2075180081B523 /* TableOfContentsController.swift */, 97A7017E1D2C59CA00AAE2D8 /* GetStartedController.swift */, + 97A127C31D774C9900FB204D /* ControllerRetainer.swift */, ); name = Controllers; path = Controller; @@ -1526,6 +1529,7 @@ 971A10401D022C42007FC62C /* LibraryUseCellularDataTBVC.swift in Sources */, 97D681411D6F712800E5FA99 /* DownloadTask+CoreDataProperties.swift in Sources */, 97D681391D6F711A00E5FA99 /* DownloadTask.swift in Sources */, + 97A127C41D774C9900FB204D /* ControllerRetainer.swift in Sources */, 97D681321D6F70EC00E5FA99 /* MigrationPolicy.swift in Sources */, 97D6811B1D6E2A7100E5FA99 /* DownloadTasksController.swift in Sources */, 97D681261D6F70AC00E5FA99 /* SearchOperation.swift in Sources */,