Любитель Swift... Не стесняйтесь указать, насколько плох код. >
Я пытаюсь создать приложение SwiftUI, и у меня есть модель SwiftData под названием Diem (класс событий обратного отсчета). Модель связана с DynamicAppIntent, поэтому пользователь должен иметь возможность выбрать один из обратных отсчетов в модели для отображения в виджете. Однако каждый раз, когда я извлекаю данные из модели, Xcode выдает FatalError. Подробности см. ниже.
Журнал:
Код: Выделить всё
Loading diems to suggest for specific diem...
Found 4 diems
Loading diems for identifiers: ["to"]
SwiftData/DataUtilities.swift:65: Fatal error: Couldn't find \Diem.id on Diem with fields [SwiftData.Schema.PropertyMetadata(name: "name", keypath: \Diem.name, defaultValue: nil, metadata: Optional(Attribute - name: , options: [unique], valueType: Any, defaultValue: nil, hashModifier: nil)), SwiftData.Schema.PropertyMetadata(name: "date", keypath: \Diem.date, defaultValue: nil, metadata: nil), SwiftData.Schema.PropertyMetadata(name: "detail", keypath: \Diem.detail, defaultValue: nil, metadata: nil)]
Код: Выделить всё
struct DiemEntityQuery: EntityQuery, Sendable {
func entities(for identifiers: [DiemEntity.ID]) async throws -> [DiemEntity] {
logger.info("Loading diems for identifiers: \(identifiers)")
let container = try ModelContainer(for: Diem.self)
let modelContext = ModelContext(container)
// VVV FATALERROR VVV
let diems = try modelContext.fetch(FetchDescriptor(predicate: #Predicate { identifiers.contains($0.id) })) // FATAL ERROR
// AAA FATALERROR AAA
logger.info("Found \(diems.count) diems")
return diems.map { DiemEntity(from: $0) }
}
func suggestedEntities() async throws -> [DiemEntity] {
logger.info("Loading diems to suggest for specific diem...")
let container = try ModelContainer(for: Diem.self)
let modelContext = ModelContext(container)
let diems = try modelContext.fetch(FetchDescriptor())
logger.info("Found \(diems.count) diems")
return diems.map { DiemEntity(from: $0) }
}
}
Проблема возникает как в iOS 17, так и в 18. Я пробовал добавить явный идентификатор в модель Diem, но модель даже не смогла инициализироваться...Может быть, это проблема с моим провайдером? Опять же, я не нашел в Интернете учебных пособий, объясняющих, как использовать DynamicAppIntents со SwiftData...
WidgetExamples @pawello2222 оказались очень полезными. Я просто хотел бы, чтобы pawellow добавил еще один пример, сочетающий в себе SwiftData и DynamicAppIntent. Я также ссылался на собственный BackyardBirds от Apple, но SwiftData Intent, похоже, не работает, и кажется, что-то решает проблему?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/790 ... ent-widget