使用 SwiftUI ForEach 从 NSOrderedSet 获取字符串值

2023-12-09

Using 这个问题/答案我可以使用 ForEach 来使用从 CoreData 中的一对多关系创建的 NSOrderedSet,但是我似乎无法访问存储在 Core Data 实体中的字符串属性。

我有两个 CoreData 实体:客户端和会话注释。 Clients可以有多个Session Notes,clientNotes的NSOrderedSet,而SessionNote只能有一个Client。

客户端+CoreDataClass.swift:

public class Client: NSManagedObject {

}

客户端+CoreDataProperties.swift:

extension Client {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Client> {
        return NSFetchRequest<Client>(entityName: "Client")
    }

    @NSManaged public var firstName: String?
    @NSManaged public var lastName: String?
    @NSManaged public var id: UUID?
    @NSManaged public var clientNotes: NSOrderedSet?

}

SessionNote+CoreDataClass.swift:

public class SessionNote: NSManagedObject {

}

SessionNote+CoreDataProperties.swift:

extension SessionNote {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<SessionNote> {
        return NSFetchRequest<SessionNote>(entityName: "SessionNote")
    }

    @NSManaged public var date: Date?
    @NSManaged public var noteText: String?
    @NSManaged public var id: UUID?
    @NSManaged public var clientOrigin: Client?

}

这是 ClientDetailView.swift:

struct ClientDetailView: View {

    @Environment(\.managedObjectContext) var moc

    @ObservedObject var selectedClient: Client


    var body: some View {
        Form {
            HStack {
                Text("\(selectedClient.firstName ?? "") \(selectedClient.lastName ?? "")")
            }
            Section() {
                ForEach(Array(selectedClient.clientNotes!.set), id: \.self) { note in
                    Text("This will repeat for the number of notes in the clientNotes NSOrderedSet")
                    /*
                     But instead I want to be able to display the noteText
                     string attribute stored in the SessionNote CoreData entity
                     instead of the above placeholder.
                    */
                }
            }

        }

    }
}

我试过了Text("\(note.noteText ?? "")")但它会引发以下错误:

“AnyHashable”类型的值没有成员“noteText”

当我尝试时Text("\(self.selectedClient.clientNotes!.value(forKeyPath: \SessionNote.noteText))")它抛出以下错误:

协议类型“Any”不能符合“_FormatSpecific”,因为只有具体类型才能符合协议

是否有办法为每个 SessionNote noteText 实体显示不同的字符串值?


您可以使用array方法上NSOrderedSet并强制将其类型转换为[SessionNote],因为你知道你将永远存储SessionNote类到有序集。

ForEach(selectedClient.clientNotes!.array as! [SessionNote], id: \.self) { (note: SessionNote) in
    Text(note.text ?? "")
}

由于在您希望使用音符的每个地方都需要进行此转换。您还可以在您的Client它总是为您提供键入的版本SessionNote array.

extension Client {
  var typedClientNotes: [SessionNote] {
    return (clientNotes?.array as? [SessionNote]) ?? []
  }
}

而且,通过这些新的变化,您可以使您的ForEach好一点。

ForEach(selectedClient.typedClientNotes, id: \.self) { note in
    Text(note.text ?? "")
}

由于这个原因,我尝试使用正常Set用于核心数据关系。因为它可以输入并且使得使用 Coredata 变得非常有趣。但,NSOrderedSet尽管是无类型集合,但仍有其自身的优势。

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

使用 SwiftUI ForEach 从 NSOrderedSet 获取字符串值 的相关文章

随机推荐

  • 在 Active storage Rails 5.2 中按文件名排序多个图像

    我在 Post 模型中有 has many attached 图像关系 我想在 帖子显示 页面上显示图像时按文件名对图像进行排序 如何按文件名排序 例子 是否可以通过像 active storage blobs filename 之类的东西
  • 如何在 angular.js 中实现history.back()

    我有一个指令 它是带有后退按钮的站点标题 我想单击以返回到上一页 我如何以角度方式做到这一点 我努力了
  • 当 I/O 对象已经有执行器时,为什么还需要 `net::dispatch`?

    我正在从这个例子中学习 Boost Beast 和 Boost Asiolibs beast example http server async ssl http server async ssl cpp 1 77 0 据我所知 I O 对
  • Spring简单地渲染一个html页面

    问题 使用 Spring 4 我在访问网页时收到此消息 Whitelabel Error Page This application has no explicit mapping for error so you are seeing t
  • Java中的executeUpdate方法是线程安全的吗

    我有多个线程尝试更新 MySQL 数据库 使用executeUpdate方法是线程安全的吗 不 它的使用不是线程安全的 事实上 如果某个其他线程使用了一条语句 然后另一个线程调用了executeUpdate 那么另一个线程的ResultSe
  • 如何在 Android 设备上访问用户的日历?

    我正在编写简单的 Android 应用程序来过滤用户日历中的一些事件 问题是 访问它的最佳方式是什么 我想到的一种选择是通过 Google Calendar Data API 我必须对用户进行身份验证并与我的应用程序中的日历同步 有没有办法
  • 使用 PHP 显示 SQL 数据时创建类别标题

    我有一个网站菜单 我正在从 mySQL 数据库中提取所有信息 我正在尝试找到一种方法将食物按标题分类 它们会像这样排序 开胃菜 结果显示在这里 Salads 结果显示在这里 等等几个不同的类别 这是我的选择语句 sql SELECT ite
  • 为什么我在 Python 解释器中收到语法错误?

    当我从 py 文件中尝试时 此代码可以工作 但在命令行解释器和空闲中失败 gt gt gt try fsock open bla except IOError print Caught print continue File
  • 找不到虚拟机选项文件(Pycharm 社区 5.03)

    每当我尝试启动 Pycharm 时 我都会收到消息 找不到虚拟机选项文件 由于这个原因 Pycharm 无法工作 我想你说的是下载后的第一次启动 那么重要的是你要跑pycharm sh来自bin文件夹 vm 选项文件也位于此处 并且脚本中的
  • jQuery:如何独立获取xml系统?

    Suppose xmlNode是一个XML DOM节点 如何独立获取它的XML系统呢 对于 IE 来说是xmlNode xml 对于网景来说 它是new XMLSerializer serializeToString xmlNode 在 j
  • Android Room - 使用 LIKE 选择查询

    我正在尝试进行查询以搜索名称包含文本的所有对象 Query SELECT FROM hamster WHERE name LIKE arg0 fun loadHamsters search String Flowable
  • 如何读取/写入超过 2 GB 大小的文件?

    所以 我没有一个想法来解决这种情况 我有一个函数可以通过替换我想要的值来修补文件 但我试图修补的文件大约是 4 5GB 这是函数 private static readonly byte PatchFind 0x74 0x72 0x79 p
  • Python:更改嵌套列表的值

    因此 我使用嵌套列表来存储一些数据 但在更改其中一个子列表的特定值时遇到了问题 if attributes 3 W self board 3 3 W 数字是我用来测试的占位符 board 是一个类变量 创建如下 我正在尝试创建用户指定的网格
  • 标点符号后的第一个字母大写

    比如我有这样一句话 hello my name is Jess what is your name 我想把它改成 Hello My name is Jess What is your name 我想出了这段代码 但在将所有内容重新连接在一起
  • 行驶距离区域

    有没有办法通过 Google Maps API 确定给定中心点的给定驾驶时间内的边界多边形 如果做不到这一点 有没有一种方法可以计算驾驶时间函数的倒数 也就是说 不是 从 A 点到 B 点需要多少分钟 而是询问 我会走多远 在一定的分钟内从
  • 将以 2 为基数的二进制数字字符串转换为 int

    我只是想将一个以 2 为基数的二进制数字字符串转换为 int 如下所示 gt gt gt 11111111 fromBinaryToInt 255 有没有办法在Python中做到这一点 您使用内置的int 函数 并将输入数字的基数传递给它
  • Eclipse 崩溃“java 已启动但返回退出代码 = -805306369”

    我知道有一个相同的帖子here但是所提出的解决方案都没有改变任何东西 而且它们已经很老了 与 Java6 相关的问题 并且似乎指的是与 Eclipse 相关的错误 我的问题是当我在开发时面向 RCP 和 RAP 开发人员的 Eclipse
  • 如何使用正则表达式只替换括号内的内容?

    如何使用正则表达式只替换括号内的内容 String This is my string 123 我想用 456 代替 123 Desired String This is my string 456 我的尝试 regex re sub re
  • 从 PowerShell 的列表中选择一个项目

    我正在使用 PowerShell 进行 api 调用 我得到 3 个输出作为调用结果 ID 1 Name Abc Location London 我想将 ID 传递给一个新变量 我怎样才能在powershell中实现这一点 谢谢 您可以使用
  • 使用 SwiftUI ForEach 从 NSOrderedSet 获取字符串值

    Using 这个问题 答案我可以使用 ForEach 来使用从 CoreData 中的一对多关系创建的 NSOrderedSet 但是我似乎无法访问存储在 Core Data 实体中的字符串属性 我有两个 CoreData 实体 客户端和会