从 SwiftUI 上的部分列表中删除项目

2023-12-02

Overview

我正在使用核心数据做一个简单的应用程序我有两个实体用户和地区该应用程序按地区显示用户列表问题是在删除操作中,如果我尝试删除第二个部分,则列表会从第一个部分中删除用户用户从第二部分删除第二个用户从第一部分。

我认为索引集发送该部分的索引是错误的,但是当我尝试将 onDelete 更改为嵌套的 forEach 时不起作用

这是代码

import SwiftUI

struct ContentView: View {
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: User.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \User.name, ascending: true)]) var users: FetchedResults<User>
    @FetchRequest(entity: Territory.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Territory.name, ascending: true)]) var territories: FetchedResults<Territory>
    @State private var showAddUser = false


       var body: some View {
           GeometryReader{ geometry in
               NavigationView {
                   ZStack {

                       List {
                           ForEach(self.territories, id: \.self) { territorie in
                            Section(header: Text(territorie.wrappedName)) {
                                ForEach(territorie.usersArray, id: \.self) { user in
                                    NavigationLink(destination: UserView(user: user)) {
                                        VStack{
                                            HStack{
                                               Text("user")
                                                Spacer()
                                                Text(user.dayLastVisit)
                                                    .padding(.horizontal)
                                            }
                                            HStack {
                                                Text(user.wrappedEmoji)
                                                    .font(.largeTitle)
                                                VStack(alignment: .leading) {
                                                    Text("\(user.wrappedName + " " + user.wrappedLastName)")
                                                        .font(.headline)
                                                    Text(user.wrappedType)

                                                }
                                                Spacer()
                                            }
                                        }

                                    }
                                }.onDelete(perform: self.deleteItem)
                            }
                           }



                       }
                       .listStyle(GroupedListStyle())
                       .environment(\.horizontalSizeClass, .regular)

                       VStack {
                           Button(action:{ self.showAddRUser.toggle()}){
                               ButtonPlus(icon:"plus")}
                           .offset(x: (geometry.size.width * 0.40), y: (geometry.size.height  * 0.38))
                           .sheet(isPresented: self.$showAddUser){
                               NewUserView().environment(\.managedObjectContext, self.moc)
                                  }
                       }
                   }
               .navigationBarTitle("Users")
                   .navigationBarItems( trailing: HStack {
                    EditButton()
                    Button(action:{self.showAddUser.toggle()}){
                    ButtonNew(text:"Nueva")}
                    }

                    .sheet(isPresented: self.$showAddUser){
                        NewUserView().environment(\.managedObjectContext, self.moc)
                   }
                   )

               }
           }
       }
    func deleteItem(at offsets: IndexSet) {
        for offset in offsets { 
            let user = users[offset]

            //borarlo del context
            moc.delete(user)

        }
        try? moc.save()
    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

我正在学习 swift 和 swiftui 所以我将不胜感激任何帮助


您需要传入节索引和行索引,以便知道要删除哪个嵌套项。像这样的东西。

.onDelete { self.deleteItem(at: $0, in: sectionIndex) }

并更改您的函数以接受该部分索引:

func deleteItem(at offsets: IndexSet, in: Int)

在你的情况下,你可能可以传递类似的东西territorie.id作为部分索引,并使用它来删除正确的项目。或者传入territorie对象 - 到达正确用户所需的任何内容。仅凭索引无法帮助您实现目标。希望这一切都有道理!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 SwiftUI 上的部分列表中删除项目 的相关文章

随机推荐

  • Netlogo 数组需要文字值

    该数组需要一个文字值 set chrom forage min forage rate share min share rate mating treshold print chrom 我该如何处理 我真的不明白 Netlogo 中的数组
  • DDD 和聚合事务边界

    假设我有一个名为文档的对象 它有一堆图像 音频 视频等形式的子对象 因此 我的应用程序的用户可以通过键入一些文本 添加图像 视频等来创建文档 据我了解在DDD中 文档是一个聚合体 而图像 视频总是与作为根的文档相关联 基于这种理解 我将如何
  • 处理 html 表单提交中的 UTF 字符

    我的 html 表单有一些输入文本字段 这些字段可能会获取中文 日文 欧洲字符 特殊字符 例如 等 简而言之 就是 unicode 字符 为了在服务器端 使用 php 处理这些值 我可以假设所有浏览器在提交表单时默认都以 UTF 8 格式对
  • 使用 Perl 正则表达式确定 URI 是否有效

    对于我正在开发的应用程序 我需要一个 Perl 脚本 它循环遍历大量 CSV 文件并确保每一行都包含有效的 URI 我之前已经问过一个关于解析 CSV 文件的问题 并且我已经开始使用Text CSV让我的生活变得更轻松 现在我面临确保 UR
  • 如何将 jQuery 验证与“chosen”插件一起使用?

    我有一些
  • C#:在 RichTextBox 中粘贴 RTF,但保留颜色和格式(即:粗体、下划线等)

    是否可以将文本粘贴到富文本框中 同时保留粘贴内容在富文本框中使用的字体 换句话说 我想从 Word 中复制一些已格式化的内容 即 使用字体 X 并带有下划线和蓝色的文本 然后将其粘贴到我的 RichTextBox 中 我希望粘贴的内容具有与
  • 使用多个参数调用 shell 命令

    我正在尝试通过 Perl 脚本自动创建证书 我要运行的命令是 easyrsa build client full clientname nopass 我认为应该在 Perl 中完成的方式是 my arguments build client
  • UITextField 仅允许使用字母数字字符

    我该如何在 iOS 中只允许输入字母数字字符UITextField 使用 UITextFieldDelegate 方法 textField shouldChangeCharactersInRange replacementString 使用
  • SimpleTestCursor robolectric 3.0--编译问题

    我正在尝试在我的应用程序中测试光标 但对于以下导入 我收到错误消息 无法解析符号 测试员 我正在使用 Robolectric 3 0 为什么导入无法解析 我是否缺少一些依赖项 我看过互联网但没有支持 请帮忙 我正在尝试使用 this API
  • 如何将张量板与 tf.layers 一起使用?

    由于权重没有明确定义 我如何将它们传递给摘要编写者 例如 conv1 tf layers conv2d tf reshape X FLAGS batch 3 160 320 filters 16 kernel size 8 8 stride
  • Eclipse PyDev 抛出虚假错误

    我昨天更新了 PyDev Eclipse 现在它告诉我没有 name其他保留字 内置函数无效 但脚本运行良好 我在这个论坛上读到 问题涉及错误导入内置程序 我尝试过更改解释器并重新添加它 但没有成功 有人可以帮我吗 错误 未定义的变量mai
  • glut - 按住某个键

    我有一些基本代码来使用 glut 收集按键向上和按键按下事件 如果我按住一个键 我会连续触发事件 下 上 下 上 下 上 而不是预期的向下 开始时一次 和向上 一次 最后 include
  • 使用 HTML 按钮调用 JavaScript 函数

    我正在尝试使用 HTML 按钮来调用 JavaScript 函数 这是代码
  • Rails 3.1:引擎与可安装应用程序

    有人可以帮助我理解 Rails 引擎和可安装应用程序之间的区别吗 在 Rails 3 1 中 您可以使用 rails new 插件 创建任一插件 命令 rails plugin new forum full Engine rails plu
  • 非常基础的 PHP 和 Mysql

    背景 我更像是一名设计师而不是程序员 但我已经破解了许多开源 CMS Drupal Joomla Wordpress 的模板 我想从头开始了解php和mysql数据库的关系 假设我本地有一个工作数据库和 php 引擎 连接到数据库并创建表的
  • 为什么 Magento 这么慢? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Magento 通常都这么
  • cURL 在 PHP 7 上非常慢,但在 PHP 5 上则不然

    对于我来说 使用 PHP7 0 11 时 cURL 似乎比仅从命令行运行请求或在 PHP5 6 24 中运行时慢得多 我正在使用以下代码对其进行测试 curl curl init curl setopt curl CURLOPT URL h
  • 我们可以使用 Hyperledger 创建不可替代的代币吗?

    根据 ERC 721 ERC 721 是一个免费 开放的标准 描述了如何构建 以太坊区块链上不可替代或独特的代币 虽然大多数 代币是可替代的 每个代币都与其他代币相同 ERC 721 代币都是独一无二的 是否有关于像超级账本这样的许可区块链
  • 将 Javascript 数组中的连续重复值分组

    我有这个数组 var arr a a b b b c d d a a a 我希望这个输出 a a b b b c d d a a a 观察 请注意 我不想对所有重复值进行分组 仅连续重复值 谁能帮我 解决方案与Array prototype
  • 从 SwiftUI 上的部分列表中删除项目

    Overview 我正在使用核心数据做一个简单的应用程序我有两个实体用户和地区该应用程序按地区显示用户列表问题是在删除操作中 如果我尝试删除第二个部分 则列表会从第一个部分中删除用户用户从第二部分删除第二个用户从第一部分 我认为索引集发送该