Fixes crash when presenting ImportController on iPad

This commit is contained in:
Riley Testut 2022-04-28 12:42:03 -07:00
parent aafe673811
commit 2a4dbabae5
3 changed files with 22 additions and 4 deletions

View File

@ -46,6 +46,9 @@
</connections> </connections>
</barButtonItem> </barButtonItem>
</navigationItem> </navigationItem>
<connections>
<outlet property="importButton" destination="FeA-O5-xd2" id="A44-3S-Okz"/>
</connections>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="JYx-xE-nis" userLabel="First Responder" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="JYx-xE-nis" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects> </objects>

View File

@ -47,6 +47,7 @@ class GamesViewController: UIViewController
private let fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> private let fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult>
private var searchController: RSTSearchController? private var searchController: RSTSearchController?
private lazy var importController: ImportController = self.makeImportController()
private var syncingToastView: RSTToastView? { private var syncingToastView: RSTToastView? {
didSet { didSet {
@ -58,6 +59,8 @@ class GamesViewController: UIViewController
} }
private var syncingProgressObservation: NSKeyValueObservation? private var syncingProgressObservation: NSKeyValueObservation?
@IBOutlet private var importButton: UIBarButtonItem!
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
fatalError("initWithNibName: not implemented") fatalError("initWithNibName: not implemented")
} }
@ -132,6 +135,8 @@ extension GamesViewController
} }
} }
self.importController.barButtonItem = self.importButton
self.prepareSearchController() self.prepareSearchController()
self.updateTheme() self.updateTheme()
@ -358,7 +363,7 @@ private extension GamesViewController
/// Importing /// Importing
extension GamesViewController: ImportControllerDelegate extension GamesViewController: ImportControllerDelegate
{ {
@IBAction private func importFiles() private func makeImportController() -> ImportController
{ {
var documentTypes = Set(System.registeredSystems.map { $0.gameType.rawValue }) var documentTypes = Set(System.registeredSystems.map { $0.gameType.rawValue })
documentTypes.insert(kUTTypeZipArchive as String) documentTypes.insert(kUTTypeZipArchive as String)
@ -379,7 +384,13 @@ extension GamesViewController: ImportControllerDelegate
let importController = ImportController(documentTypes: documentTypes) let importController = ImportController(documentTypes: documentTypes)
importController.delegate = self importController.delegate = self
importController.importOptions = [itunesImportOption] importController.importOptions = [itunesImportOption]
self.present(importController, animated: true, completion: nil)
return importController
}
@IBAction private func importFiles()
{
self.present(self.importController, animated: true, completion: nil)
} }
func importController(_ importController: ImportController, didImportItemsAt urls: Set<URL>, errors: [Error]) func importController(_ importController: ImportController, didImportItemsAt urls: Set<URL>, errors: [Error])

View File

@ -37,6 +37,8 @@ class ImportController: NSObject
var delegate: ImportControllerDelegate? var delegate: ImportControllerDelegate?
var importOptions: [ImportOption]? var importOptions: [ImportOption]?
var barButtonItem: UIBarButtonItem?
private weak var presentingViewController: UIViewController? private weak var presentingViewController: UIViewController?
// Store presentedViewController separately, since when we dismiss we don't know if it has already been dismissed. // Store presentedViewController separately, since when we dismiss we don't know if it has already been dismissed.
@ -82,6 +84,8 @@ class ImportController: NSObject
} }
alertController.addAction(filesAction) alertController.addAction(filesAction)
alertController.popoverPresentationController?.barButtonItem = self.barButtonItem
self.presentedViewController = alertController self.presentedViewController = alertController
self.presentingViewController?.present(alertController, animated: true, completion: nil) self.presentingViewController?.present(alertController, animated: true, completion: nil)
} }
@ -198,7 +202,7 @@ private var ImportControllerKey: UInt8 = 0
extension UIViewController extension UIViewController
{ {
fileprivate(set) var importController: ImportController? fileprivate var importController: ImportController?
{ {
set set
{ {