Код: Выделить всё
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)
Я не могу воспроизвести ошибку локально.
Единственная ссылка, которую я нашел о подобной проблеме, связана с большими 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
Мобильная версия