簡體   English   中英

iOS 15 僅視圖修改器會導致 iOS 14 崩潰,即使 #available(iOS 15.0, *)

[英]iOS 15 only view modifier causes crash on iOS 14 even with if #available(iOS 15.0, *)

我正在使用 SwiftUI 的拖放修飾符。 因為,iOS 15 提供了一個選項來自定義onDrag修改器,我正在使用它,如下所示。

問題:我有一個if #available(iOS 15.0, *)保護來選擇不同 iOS 版本的視圖。 但是,不知何故,我在 iOS 14.x 上的應用程序由於EXC_BAD_ACCESS (code=1, address=0x0)錯誤而崩潰,因為它試圖找到新的 API 但它不存在於 Z1BDF605991920DB1ZEBCBD1440C 中。

@ViewBuilder
private func getRoutineCard(routine: RoutineInfo) -> some View {
    if #available(iOS 15.0, *) {
        newRoutineCard(routine: routine)
    } else {
        oldRoutineCard(routine: routine)
    }
}

@available(iOS 15.0, *)
@ViewBuilder
private func newRoutineCard(routine: RoutineInfo) -> some View {
    RoutineCard(routine: routine)
    // This modifier is what crashes the app on iOS 14.x
    // onDrag with a drag preview view not available in iOS 14.x
        .onDrag({
            dragReorder(draggedRoutine: routine)
        }, preview: {
            RoutineCardDragPreview(routine: routine)
        })
        .onDrop(of: [.text], delegate: ReorderDropDelegate(isDragging: $isDragging, draggedItem: $draggedItem, item: routine, haptics: haptics, onMove: updateOrder(routine:order:)))
}

@ViewBuilder
private func oldRoutineCard(routine: RoutineInfo) -> some View {
    RoutineCard(routine: routine)
        .onDrag { dragReorder(draggedRoutine: routine) }
        .onDrop(of: [.text], delegate: ReorderDropDelegate(isDragging: $isDragging, draggedItem: $draggedItem, item: routine, haptics: haptics, onMove: updateOrder(routine:order:)))
}

我在尋找什么:基於 iOS 版本在兩個視圖之間進行選擇而不會導致崩潰的解決方法。

對於任何偶然發現這一點的人:

在 ViewBuilder 中使用 if #available(iOS 14.0, OSX 11.0, *) 時,應用程序在回退端運行時會崩潰。

Xcode 版本 13.1 及更高版本會發生這種情況。 (目前 Xcode 13.2.1)用 Xcode 13.0 構建測試,崩潰消失了。 我們認為這是因為 Xcode 中的編譯器優化錯誤。 對於開發版本,我們沒有這些崩潰。

更多信息: https://swiftui-lab.com/bug-os-check/和相同的答案: Swiftui 應用程序在 Z1BDF605991920DB11ZCBDF18508204C4EB 上使用不同的 SearchBar (ViewModifier) 崩潰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM