Я работаю над старым приложением для 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
Swiftui FileImporter внутри UihostingController ⇐ IOS
Программируем под IOS
-
Anonymous
1739637568
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?
Подробнее здесь: [url]https://stackoverflow.com/questions/79441895/swiftui-fileimporter-inside-uihostingcontroller[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия