Swiftui FileImporter внутри UihostingControllerIOS

Программируем под IOS
Ответить
Anonymous
 Swiftui FileImporter внутри UihostingController

Сообщение Anonymous »

Я работаю над старым приложением для iOS, которое началось с Objective-C + Uikit и перевозит в Swift + Swiftui. В настоящее время его код в основном Swift + Swiftui, но он все еще имеет некоторые объекты C и некоторые Uikit ViewControllers. Полем Это работало хорошо, пока iOS 18 не будет запущен. С iOS 18 сборщик файлов не запускается правильно и замораживает в каждом симуляторе (уникальное реальное устройство, которое я мог бы проверить с iOS 18, казалось, работал правильно). < /P>
Мне удалось клонировать Мой проект и оставьте его с минимальным количеством файлов, чтобы воспроизвести эту ошибку. Это код: < /p>
Appdelegate.h
#import

@interface AppDelegate : UIResponder {}

@property (strong, nonatomic) UIWindow *window;

@end
< /code>
Aappdelegate.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>
и, наконец, 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>
Запустить это и открывать сборщик файлов (это займет пару секунд) в симуляторе iPhone 13 Pro (18.2) дает это: < /p>

и не отвечает на какое -либо прикосновение, приложение замораживает И я должен убить его. .
Итак, я внес эти изменения в минимальный проект: < /p>

Удалить файлы AppDelegate, FirstViewBuilder и MyHostingController. < /li>
Создать этот файл приложения Swiftui < /li>
< /ul>
import SwiftUI

@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
FirstView()
}
}
}
< /code>
и снова та же проблема с iOS 18. < /p>
Но если я запустим этот точный проект в симуляторе iPhone 13 Pro (17.4) и открою Приложения файлов (теперь он открывается практически мгновенно), это работает хорошо и показывает это, как и ожидалось, и я могу взаимодействовать с ним и выбрать файлы: < /p>

Последнее, что я пробовал, - это удаление Launchcreen.xib из моего проекта и ключа файла интерфейса экрана запуска моя info.plist, но проблема продолжается. >
Возможность создания свежего проекта Swiftui и «переместить» старый проект к новому может занять у меня несколько недель, и я сбросил его к настоящему времени. < /p>
Могу ли я использовать другой метод для выбора файлов из просмотров Swiftui с iOS 18?


Подробнее здесь: https://stackoverflow.com/questions/794 ... controller
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»