Мне нужна помощь с отношениями в моих CoreData. У меня две сущности; ProjectItem и TaskItem. У них есть отношения «один ко многим» (у одного проекта может быть много задач). У меня есть форма, в которой пользователь может добавить задачу, и я хочу, чтобы он мог выбрать проект из этого списка и назначить задачу проекту. Ниже приведены мои подклассы:
extension ProjectItem {
@NSManaged public var projectTitle: String
@NSManaged public var projectDateCreated: Date
@NSManaged public var task: NSSet
}
// MARK: Generated accessors for task
extension ProjectItem {
@objc(addTaskObject:)
@NSManaged public func addToTask(_ value: TaskItem)
@objc(removeTaskObject:)
@NSManaged public func removeFromTask(_ value: TaskItem)
@objc(addTask:)
@NSManaged public func addToTask(_ values: NSSet)
@objc(removeTask:)
@NSManaged public func removeFromTask(_ values: NSSet)
static func getProjectItemFetchRequest() -> NSFetchRequest<ProjectItem>{
let request = ProjectItem.fetchRequest() as! NSFetchRequest<ProjectItem>
request.sortDescriptors = [NSSortDescriptor(key: "projectDateCreated", ascending: false)]
return request
}
}
extension TaskItem {
@NSManaged public var completedDate: Date
@NSManaged public var createdDate: Date
@NSManaged public var isComplete: Bool
@NSManaged public var title: String
@NSManaged public var project: ProjectItem
static func getTaskItemFetchRequest() -> NSFetchRequest<TaskItem>{
let request = TaskItem.fetchRequest() as! NSFetchRequest<TaskItem>
request.sortDescriptors = [NSSortDescriptor(key: "createdDate", ascending: false)]
return request
}
}
Ниже приведено представление для добавления задач, и у меня уже настроен сборщик, который вытаскивает проекты. Я просто не знаю, как включить эту информацию при сохранении задачи.
struct TaskAdd: View {
@Environment(\.managedObjectContext) var managedObjectContext
@Environment(\.presentationMode) var presentationMode
@FetchRequest(fetchRequest: TaskItem.getTaskItemFetchRequest()) var taskItems: FetchedResults<TaskItem>
@FetchRequest(fetchRequest: ProjectItem.getProjectItemFetchRequest()) var projectItems: FetchedResults<ProjectItem>
@State private var title = ""
@State private var project: ProjectItem?
var body: some View {
NavigationView {
VStack(spacing: 0) {
Form {
Section() {
TextField("Title", text: $title)
}
Section() {
Picker(selection: $project, label: Text("Add to Project")) {
Text("No Project").tag(nil as ProjectItem?)
ForEach(projectItems, id: \.self) { item in
Text("\(item.projectTitle)").tag(item as ProjectItem?)
}
}
}
}.listStyle(GroupedListStyle())
.navigationBarTitle(Text("Add Task"), displayMode: .inline)
.navigationBarItems(leading:
Button("Cancel") {
self.presentationMode.wrappedValue.dismiss()
}, trailing:
Button("Add") {
let newTask = TaskItem(context:self.managedObjectContext)
newTask.title = self.title
newTask.isComplete = false
newTask.createdDate = Date()
do {
try self.managedObjectContext.save()
} catch {
print(error)
}
self.presentationMode.wrappedValue.dismiss()
}
)
}
}
}
}
struct TaskAdd_Previews: PreviewProvider {
static var previews: some View {
TaskAdd()
}
}
Я хотел бы иметь возможность назначать задачу проекту с помощью этой формы. Любая помощь здесь будет принята с благодарностью!