如何解决关于 SwiftUI 视图和 CoreData 的两个问题
我有 2 个具有父子关系的 CoreData 对象。我需要列出所有孩子并通过点击按钮添加孩子。新孩子必须在点击后立即出现在列表中。
下面是实验视图的代码。 如您所见,它显示了包含在父对象中的子对象列表。 它以两种方式添加新子项:1) 立即在按钮操作中和 2) 使用 .actionSheet 修饰符进行确认。
问题是:
struct ObjectEditorView: View {
init(editingObject parent: ParentObjectEntity? = nil)
{
let context = NSManagedobjectContext.main.newChildViewContext()
self._editingObject = State(initialValue: {
if let parent = parent
{
return (context.object(with: parent.objectID) as! ParentObjectEntity)
}
else
{
return ParentObjectEntity(context: context)
}
}())
editingContext = context
}
@State var editingObject: ParentObjectEntity
private let editingContext: NSManagedobjectContext
@State private var addingItem = false
fileprivate func AddChild()
{
let order = editingObject.orderedChildren.count
let child = ChildobjectEntity(context: editingContext)
child.parent = editingObject
child.title = "Child \(order + 1)"
child.order = Int16(order)
}
var body: some View {
NavigationView
{
vstack
{
HStack
{
Spacer()
Button(action: { addingItem = true })
{
Label("Method 1",systemImage: "plus")
}
Button(
action:
{
AddChild()
})
{
Label("Method 2",systemImage: "plus")
}
}
.padding()
List
{
ForEach(editingObject.orderedChildren,id: \.self)
{ item in
NavigationLink(
destination: Text("Destination"),isActive: .constant(false),label: { Text(item.title) })
}
}
}
.actionSheet(isPresented: $addingItem)
{
ActionSheet(
title: Text("Add new child?"),message: nil,buttons:
[
.default(Text("Yes"))
{
AddChild()
addingItem = false
},.cancel
{
addingItem = false
}
])
}
}
}
}
ParentObjectEntity
和 ChildobjectEntity
是 CoreData 托管对象:
@objc(ParentObjectEntity)
public class ParentObjectEntity: NSManagedobject {
var orderedChildren: [ChildobjectEntity] { children?.sorted{ $0.order < $1.order } ?? [] }
}
extension ParentObjectEntity {
@NSManaged public var title_: String?
@NSManaged public var children: Set<ChildobjectEntity>?
}
@objc(ChildobjectEntity)
public class ChildobjectEntity: NSManagedobject {
var title: String {
get { title_ ?? "UnkNown child" }
set { title_ = newValue }
}
}
extension ChildobjectEntity {
@NSManaged public var title_: String?
@NSManaged public var order: Int16
@NSManaged public var parent: ParentObjectEntity?
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。