这个 SwiftData 问题让我难住了。我的应用程序在通过电缆上传时工作正常,但当通过 TestFlight 部署时,它在尝试首次获取数据时启动时立即崩溃。
我已尝试以下方法来解决该问题:
Debug和
Release禁用
Swift Compiler - Code Generation
配置为 No Optimization
fetch
修饰符而不是 task()
调用
onAppear()
这是在 ViewModel 中调用
fetch()
的代码。
func refresh(_ ctx: ModelContext) {
records.removeAll()
let wRecs: [WeightRecord] = fetchAll(ctx)
records.append(contentsOf: wRecs)
let bpRecs: [BloodPressureRecord] = fetchAll(ctx)
records.append(contentsOf: bpRecs)
let mdRecs: [MedicationTakenRecord] = fetchAll(ctx)
records.append(contentsOf: mdRecs)
let bmRecs: [BowelMovementRecord] = fetchAll(ctx)
records.append(contentsOf: bmRecs)
let seRecs: [SideEffectRecord] = fetchAll(ctx)
records.append(contentsOf: seRecs)
let fdRecs: [FoodConsumedRecord] = fetchAll(ctx)
records.append(contentsOf: fdRecs)
let pmpRecs: [PumpChangeRecord] = fetchAll(ctx)
records.append(contentsOf: pmpRecs)
records.sort { lRec, rRec in
lRec.recordedOn < rRec.recordedOn
}
}
func fetchAll<R: PersistentModel & Record>(_ ctx: ModelContext) -> [R] {
let fetchDescriptor = FetchDescriptor<R>(
sortBy: [SortDescriptor(\.recordedOn)]
)
return (try? ctx.fetch(fetchDescriptor)) ?? []
}
有什么想法我可能做错了什么吗?
我也有同样的问题。一切正常,直到应用程序发布到 TestFlight。当我在 Xcode 应用程序方案中将应用程序置于发布模式时,我注意到同样的崩溃。
问题是我在模型中隐式展开了可选值 - 因为 SwiftData 与 iCloud 同步要求所有属性都是可选值或具有默认值。 这似乎导致 FetchDescriptor 在调用 Fetch 时强制打开属性并崩溃。 这在调试中没有引起任何问题,但在发布中崩溃了。
将我的属性更改为选项解决了问题。