Ленивая загрузка зависимых отношений в SwiftDataIOS

Программируем под IOS
Ответить
Anonymous
 Ленивая загрузка зависимых отношений в SwiftData

Сообщение Anonymous »

У меня есть модель заказа, содержащая элементы

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

@Model
class Order: Decodable {
@Attribute(.unique) var orderId: String
var items: [Item]
}
Когда я получаю все заказы в виде списка, элементы не загружаются и отображаются пустыми

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

var body: some View {
List {
DynamicQuery(orderDescriptor) { orders in
ForEach(orders) { order in
ForEach(order.items) { item in
if let sandwichName = item.data?.sandwichName {
Text(sandwichName)
}
}
}
}
.onReceive(toolbarModel.$selectedDate) { newDate in
print("Date changed to: \(newDate)")
getOrders(ofDate: newDate) { result in
switch result {
case .success:
print("Order Fetch successful for Date \(newDate)")
case .failure(let error):
print("Order Fetch failed with \(error)")
}
}
}
}
Вот как я вставляю заказы в контекст модели

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

let orders = try JSONDecoder().decode([Order].self, from: jsonData)

for order in orders {
//  print(order.items) // crashes the app
modelContext.insert(order)
}
Я пытался определить связьKeyPathsForPrefetching, но не помогло.

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

private var orderDescriptor: FetchDescriptor {
var fetchDescriptor = FetchDescriptor(
predicate: Order.currentOrders(with: toolbarModel.selectedDate),
sortBy: [SortDescriptor(\Order.time)]
)
//      fetchDescriptor.relationshipKeyPathsForPrefetching = [\.items]

return fetchDescriptor
}
Я знаю, что это отложенная загрузка, но я предполагаю, что если я ссылаюсь на элементы внутри списка, он должен загрузиться? Если я перезагрузлю приложение и немного подожду, я смогу увидеть некоторые элементы, поэтому кажется, что оно загружается, но не сразу. Что-нибудь, чего мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/782 ... -swiftdata
Ответить

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

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

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

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

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