Ich arbeite an einer alten iOS-App, die mit Objective-C + Uikit begann und in Swift + Swiftui migriert wurde. Derzeit ist sein Code meistens Swift + Swiftui, aber er verfügt immer noch über einige objektive C und einige UIKit ViewController. . Dies hat gut funktioniert, bis iOS 18 gestartet wurde. Mit iOS 18 startet der Datei -Picker nicht korrekt und ist in jedem Simulator eingefroren (das eindeutige echte Gerät, das ich mit iOS 18 testen konnte, schien korrekt zu funktionieren). < /P>
Ich habe es geschafft zu klonen Mein Projekt und lassen Sie es mit der minimalen Anzahl von Dateien, um diesen Fehler zu reproduzieren. Dies ist der Code: < /p>
Appdelegate.h
#import
@interface AppDelegate : UIResponder {}
@property (strong, nonatomic) UIWindow *window;
@end
< /code>
AppDelegate.m
#import "AppDelegate.h"
#import "MyApp-Swift.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
FirstViewBuilder *viewBuilder = [[FirstViewBuilder alloc] init];
[viewBuilder show];
return YES;
}
@end
< /code>
FirstViewBuilder.Swift
import SwiftUI
@objc class FirstViewBuilder: NSObject {
private var view: UIHostingController
@objc override init() {
self.view = MyHostingController(rootView: FirstView())
}
@objc func show() {
let app = UIApplication.shared.delegate as? AppDelegate
let window = app?.window
window?.backgroundColor = .white
// Use navigationController or view directly depending on use
window?.rootViewController = view
}
}
< /code>
Firstview.swift
import SwiftUI
struct FirstView: View {
@State var hasToOpenFilesApp = false
var body: some View {
VStack(alignment: .leading, spacing: 0) {
Button("Open Files app") {
hasToOpenFilesApp = true
}.fileImporter(isPresented: $hasToOpenFilesApp, allowedContentTypes: [.text]) { result in
switch result {
case .success(let url):
print(url.debugDescription)
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
}
< /code>
Und schließlich myHostingController < /p>
import SwiftUI
class MyHostingController: UIHostingController where Content: View {
override init(rootView: Content) {
super.init(rootView: rootView)
}
@objc required dynamic init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.hidesBackButton = true
}
}
< /code>
Starten Sie dies und öffnen Sie den Datei -Picker (es dauert ein paar Sekunden) in einem iPhone 13 Pro (18.2) Simulator: < /p>
Und sie reagiert nicht auf einen Berührungen, die App ist gefroren Und ich muss es töten. . Erstellen Sie diese Swiftui -App -Datei < /li>
< /ul>
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
FirstView()
}
}
}
< /code>
und wieder das gleiche Problem mit iOS 18. < /p>
, aber wenn ich dieses genaue Projekt in einem iPhone 13 Pro (17.4) -Simulator starte und die öffnen und die öffnen, und das öffnen Dateien -Apps (jetzt wird es fast sofort geöffnet) Es funktioniert in Ordnung und zeigt dies erwartungs : //i.sstatic.net/e4hxv1uz.png "width =" 256 "/>
Letzte, was ich ausprobiert habe Mein Info.plist, aber das Problem findet immer wieder statt.
Ich denke, es muss an meiner Projektkonfiguration (zu alt) zurückzuführen sein >
Die Möglichkeit, ein frisches Swiftui -Projekt zu haben und das alte Projekt an das neue zu "verschieben" > Könnte ich eine andere Methode verwenden, um Dateien aus Swiftui -Ansichten mit iOS 18 auszuwählen?
Swiftui FileMporter im UiHostingController ⇐ IOS
-
- Similar Topics
- Replies
- Views
- Last post