Я пытаюсь реализовать простое добавление одной сущности к другой в Базовых данных, но он этого не делает и не может найти то, что должно быть реализовано. Первый объект имеет атрибут, который является массивом второго объекта. Когда я пытаюсь заполнить основные данные, добавление не происходит. Я хочу заполнить первую сущность, и вторая тоже внутри. Я пробовал отношения, но поскольку атрибут Transformable, он не имеет смысла для меня и не работает. Я тоже пробовал вручную, безуспешно. Когда я нажимаю кнопку «Книги», атрибут равен нулю, а кнопка «Информация» сообщает мне данные: ошибка.
import SwiftUI
import CoreData
struct Books {
var id: String
var information: [Information]
init(id: String, information: [Information]) {
self.id = id
self.information = information
}
}
struct Information {
var id: String
var preview: String
init(id: String, preview: String) {
self.id = id
self.preview = preview
}
}
let db: [Books] = [
Books(id: "Book title 1", information: [
Information(id: "ABC", preview: "Some first preview"),
Information(id: "abc", preview: "lesser preview to first preview")]),
Books(id: "Book title 2", information: [Information(id: "DEF", preview: "Some second preview")]),
Books(id: "Book title 3", information: [
Information(id: "GHI", preview: "Some third preview"),
Information(id: "ghi", preview: "random third preview"),
Information(id: "123", preview: "bla bla bla"),
Information(id: "123", preview: "Some very long preview - Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. ")
])
]
class CDDatabase {
static let shared = CDDatabase()
func saveLocally(list: [Books]) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let container = appDelegate.persistentContainer
container.performBackgroundTask { (context) in
for book in db {
let newLocalBook = CD_Book(context: context)
newLocalBook.id = book.id
for info in book.information {
let newInfo = CD_Information(context: context)
newInfo.id = info.id
newInfo.preview = info.preview
print("Before appending we have: \(newInfo)")
newLocalBook.information?.append(newInfo)
}
print(newLocalBook.information ?? "Nothing appended")
}
do {
try context.save()
} catch {
print(error.localizedDescription)
}
}
}
}
struct ContentView: View {
@FetchRequest(
entity: CD_Book.entity(),
sortDescriptors: []
) var books: FetchedResults<CD_Book>
@FetchRequest(
entity: CD_Information.entity(),
sortDescriptors: []
) var information: FetchedResults<CD_Information>
var body: some View {
VStack {
VStack(alignment: .center, spacing: 50) {
Button("Print books") {
print(self.books)
}
Button("Print information") {
print(self.information)
}
}
ForEach(self.books, id: \.id) { book in
Section(header: Text(book.id ?? "No book id")) {
ForEach(book.information ?? [], id: \.id) { info in
Text("ID: \(info.id ?? "No id fetched"), PREVIEW: \(info.preview ?? "No preview fetched")")
}
}
}
}
}
}
А в Appdelegate, в didFini sh с опциями я называю это:
private func preloadData() {
CDDatabase.shared.saveLocally(list: db)
}
При запуске консоль говорит мне, что ничего не добавлено. Заранее спасибо!