QLPreviewController аварийно завершает работу с iOS 18 [закрыто]IOS

Программируем под IOS
Ответить
Anonymous
 QLPreviewController аварийно завершает работу с iOS 18 [закрыто]

Сообщение Anonymous »

В моем приложении есть PDFViewer, использующий библиотеку QLPreviewController. До прошлого месяца все работало без проблем. С тех пор у меня несколько раз возникали сбои при работе с iOS 18. Это трассировка стека:

Код: Выделить всё

          Crashed: com.apple.main-thread
0  QuickLook                      0x137fc __47-[QLPreviewController setCanChangeCurrentPage:]_block_invoke + 40
1  libdispatch.dylib              0x2370 _dispatch_call_block_and_release + 32
2  libdispatch.dylib              0x40d0 _dispatch_client_callout + 20
3  libdispatch.dylib              0x129e0 _dispatch_main_queue_drain + 980
4  libdispatch.dylib              0x125fc _dispatch_main_queue_callback_4CF + 44
5  CoreFoundation                 0x56f64 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16
6  CoreFoundation                 0x54188 __CFRunLoopRun + 1996
7  CoreFoundation                 0x535b8 CFRunLoopRunSpecific + 572
8  GraphicsServices               0x11c4 GSEventRunModal + 164
9  UIKitCore                      0x3de2c0 -[UIApplication _run] + 816
10 UIKitCore                      0x48cddc UIApplicationMain + 340
11 MyApp                          0x11300 main + 14 (main.m:14)
12 ???                            0x1c362cd34 (Missing)
Проверка этого сбоя с помощью организатора XCode > У меня нет дополнительной информации, это та же самая трассировка стека.
Я не могу воспроизвести ошибку локально.
Единственная ссылка, которую я нашел о подобной проблеме, связана с большими PDF-файлами, но в моем случае некоторые сбои происходят с PDF-файлами не такого большого размера, а с другой стороны, в сбое говорится, что setCanChangeCurrentPage, и речь идет об изменении страницы. ..
Это представление SwiftUI, в котором я управляю QLPreviewController:

Код: Выделить всё

import SwiftUI
import QuickLook

struct PdfViewerView: View {

@ObservedObject var observedModel: PdfViewerViewAdapter
@State var isViewVisible: Bool = false

init(observedModel: PdfViewerViewAdapter) {

self.observedModel = observedModel
}

var body: some View {

NavigationView {

VStack(alignment: .leading, spacing: 0) {
}
.sheet(isPresented: $observedModel.showingPreview) {

HStack {
Button("Close") {
goBack()
self.observedModel.showingPreview = false
}
Spacer()
}
.padding()

if let url = observedModel.pdfUrl {
QuickLookController(url: url) {}
}
}
.onAppear {
isViewVisible = true
startView()
}
.onAppCameToForeground {
if isViewVisible {
startView()
}
}
.onDisappear {
isViewVisible = false
}
}
}

private func startView() {
LoadingViewManager.shared.showSpinner()
}
}

struct QuickLookController: UIViewControllerRepresentable {

var url: URL
var onDismiss: () -> Void

func makeCoordinator() -> Coordinator {
Coordinator(self)
}

func makeUIViewController(context: Context) -> UINavigationController {
let controller = QLPreviewController()

controller.dataSource = context.coordinator
controller.reloadData()
return UINavigationController(rootViewController: controller)
}

func updateUIViewController(_ viewController: UINavigationController, context: UIViewControllerRepresentableContext) {
if let controller = viewController.topViewController as? QLPreviewController {
LoadingViewManager.shared.hideSpinner()
controller.reloadData()
}
}

class Coordinator: NSObject, QLPreviewControllerDataSource {
var parent: QuickLookController

init(_ qlPreviewController: QuickLookController) {
self.parent = qlPreviewController
super.init()
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return self.parent.url as QLPreviewItem
}

}
}
Есть какие-нибудь сведения о том, что происходит?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ith-ios-18
Ответить

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

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

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

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

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