Swift Core-Data 从属性列表中删除项目
Posted
技术标签:
【中文标题】Swift Core-Data 从属性列表中删除项目【英文标题】:Swift Core-Data delete items from attribute list 【发布时间】:2020-08-12 12:58:13 【问题描述】:我正在从事一个核心数据项目。 目前我有一个具有以下属性的实体(项目):
@NSManaged public var title: String?
@NSManaged public var list: [String]
我正在使用带有 ForEach 的列表在列表中显示实体。如果用户选择一个项目,我会通过导航链接打开另一个视图。
主列表代码:
struct ItemList: View
@Environment(\.managedObjectContext) var viewContext
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Item.title, ascending: true)])
var ItemFetch: FetchedResults<Item>
var body: some View
NavigationView
List
ForEach(ItemFetch, id: \.self item in
NavigationLink(destination: ItemView(Item: item)
Text(item.title)
.onDelete(perform: removeItem(at:))
private func removeItem(at offsets: IndexSet)
for index in offsets
let item = ItemFetch[index]
viewContext.delete(item)
二次查看代码:
struct ItemView: View
@Environment(\.managedObjectContext) var viewContext
@ObservedObject var Item: Item
var body: some View
NavigationView
List
ForEach Item.list.indices entry in
Text(self.Item.list[entry]
.navigationBarItem(
trailing:
Button(action:
self.Item.list.append("SubItem")
)
Text("Add SubItem")
)
用户可以通过按下按钮将子项添加到列表中。
项目列表中的项目也可以通过滑动删除。
现在我希望用户也可以通过滑动来删除子项列表中的子项。 如果我尝试实现相同的功能,那么用户将通过删除我不想要的 SubItem 来删除 Item。
我不知道如何使用 FetchRequest 只获取名为 list 的属性。有没有办法这样做或以其他方式删除子项?
谢谢。
【问题讨论】:
【参考方案1】:问题中发布的代码实际上不起作用。
如果您希望能够对子项运行查询,您可能需要为它们创建一个新实体,并使用 Core Data 一对一关系链接这两个实体。
如果你想坚持一个字符串数组来存储子项,你可以通过添加来实现滑动删除功能:
.onDelete(perform: removeSubItem(at:))
到ItemView中的ForEach
,即
ForEach(Item.list, id: \.self) entry in // you should actually call it "item" to avoid confusion...
Text(entry)
.onDelete(perform: removeSubItem(at:))
removeSubItem
可能看起来像这样:
private func removeSubItem(at offsets: IndexSet)
for index in offsets
Item.list.remove(at: index) // you should actually call it "item" to avoid confusion...
try? viewContext.save()
【讨论】:
嘿 Lobo,很遗憾,即使这是解决方案,我也无法支持您的答案。非常感谢你。现在,我将坚持使用数组,直到我了解更多关于核心数据关系的知识。以上是关于Swift Core-Data 从属性列表中删除项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?
IOS/objective-c/core-data:如何从相关实体获取属性
从 Core-Data 请求不同的 NSManagedObject 属性实例时返回啥类?